rails4でjquery-ui-railsを使って画像が表示されない場合

これはハマる。

rails4になってasset pipelineの挙動が変更になったようで、今までのようにgemfileにjquery-ui-railsを追加しただけでは、うまく画像のパスを探せずに画像が表示されない。

解決策としては手動でjquery-uiをダウンロードしてcss、js、imagesを追加する。
日本語化する場合はui/i18nの下にある日本語化のjsも忘れずに。

rails4ではapp/assets以下のパスを参照するとエラーになるので、app/assets/stylesheetsに追加したjquery-uiのimagesディレクトリをpublic以下に移し、jquery-ui-1.10.4.cssの画像パスを変更する。


url("images/ui-bg_flat_0_aaaaaa_40x100.png")

url("/images/jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png")
*この場合、public/images/jquery-ui以下に画像を置いている。

あー、すっきりした。

rvm list でエラーになったら。

((: 1export: 基底の値が大きすぎます (エラーのあるトークンは "1export")

こんなエラーが出るようになったら、
~/.rvmrc を見なおしてみましょう。

本来二行に改行されるはずのスクリプトが一行になっているかも知れません。

これを
export rvm_pretty_print_flag=1export rvm_path="/home/your_name/.rvm"

こう直す
export rvm_pretty_print_flag=1
export rvm_path="/home/your_name/.rvm"

rails3 on ubuntu wiht Amazon EC2

色々はまったのでメモ。
ubuntu+rvm+zlibは鬼門かも。

  • AMIの起動Community AMIs にて "ubuntu-lucid" を検索-AMIの起動

Community AMIs にて "ubuntu-lucid" を検索し、Manifest を降順に整列して最新のものを選択。

ssh -i AWS_KEY.pem ubuntu@ec2-***.amazonaws.com
  • rootパスワードの変更
sudo passwd root
  • パッケージの更新
sudo aptitude update
sudo aptitude safe-upgrade
sudo aptitude install unzip emacs
  • AMI Toolsのインストール
cd /usr/local/src/
sudo curl -O http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.zip
sudo unzip ec2-ami-tools.zip -d /usr/local
cd /usr/local/src
sudo wget http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip
sudo unzip ec2-api-tools.zip
cd ec2-api-tools-1.4.2.2
sudo cp -r bin /mnt
sudo cp -r lib /mnt
  • jreのインストール
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo apt-get update
sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts
export EC2_HOME=/mnt
export PATH=$PATH:$EC2_HOME/bin
export EC2_PRIVATE_KEY=$EC2_HOME/pk-***.pem
export EC2_CERT=$EC2_HOME/cert-***.pem
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export EC2_AMITOOL_HOME=/usr/local/ec2-ami-tools-1.3-***
export PATH=$PATH:${EC2_AMITOOL_HOME:-EC2_HOME}/bin
source ~/.bashrc
[return]

確認

source ~/.bash_profile
ec2ver
which ec2-bundle-vol
  • gitのインストール
sudo aptitude install git-core
  • rubyのインストール
sudo aptitude install ruby
  • gemのインストール
cd /usr/local/src
sudo wget http://rubyforge.org/frs/download.php/74234/rubygems-1.5.2.tgz
sudo tar xvzf rubygems-1.5.2.tgz
cd rubygems-1.5.2/
sudo ruby setup.rb

シンボリックリンクの作成

cd /usr/bin
sudo ln -s /usr/bin/gem1.8 gem
sudo gem update --system
  • rvmのインストール
bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )

.rvmrcに以下を追加

export rvm_pretty_print_flag=1

.bashrcに以下を追加

# rvmのインストールで既に.bash_profileに追加済みなら不要
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
  • パスを適用
source ~/.bash_profile
  • rvmを最新化
rvm get head
rvm reload
  • rubyのインストール
# For Ruby (MRI & ree) & ruby-head,  you should install the following OS dependencies
sudo aptitude install build-essential bison autoconf

# If you wish to install rbx and/or Ruby 1.9 head (MRI) (eg. 1.9.2-head),
then you must install and use rvm 1.8.7 first.
rvm install 1.8.7

rvm package install readline
rvm package install zlib
rvm package install openssl

# then ruby 1.9.2
rvm install 1.9.2 --default -C --with-openssl-dir=$rvm_path/usr --with-readline-dir=$rvm_path/usr --with-zlib-dir=$rvm_path/usr
  • railsのインストール
gem install rails
  • mysqlのインストール
sudo aptitude install mysql-server mysql-client libmysqlclient-dev
gem install mysql

# /etc/mysql/my.cnfの編集
[client]                                                                                                            
port    = 3306                                                                                                      
socket    = /var/run/mysqld/mysqld.sock                                                                             
default-character-set=utf8  # 追加
sudo aptitude install apache2
sudo /etc/init.d/apache2 start
  • passengerのインストール
gem install passenger
sudo aptitude install libcurl4-openssl-dev libssl-dev libopenssl-ruby apache2-prefork-dev libapr1-dev libaprutil1-dev
passenger-install-apache2-module
  • passenger設定ファイル
# /etc/apache2/mods-available/passenger.load 
LoadModule passenger_module /home/ubuntu/.rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.6/ext/apache2/mod_passenger.so

# /etc/apache2/mods-available/passenger.conf
PassengerRoot /home/ubuntu/.rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.6
PassengerRuby /home/ubuntu/.rvm/wrappers/ruby-1.9.2-p180/ruby
cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/passenger.load passenger.load
sudo ln -s ../mods-available/passenger.conf passenger.conf

# /etc/apache2/sites-availables/***
<VirtualHost *:80> 
  ServerAdmin test@test.com
  ServerName test.com
 
  # Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
  LogLevel warn
  SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(ico)|(js)|(css)$" no_log
  CustomLog /var/log/apache2/test.com/access.log combined env=!no_log
  ErrorLog /var/log/apache2/test.com/error.log
 
  DocumentRoot /home/ubuntu/rails/test.com/public
  <Directory /home/ubuntu/rails/test.com/public>
    Allow from all 
    Options FollowSymLinks -MultiViews
  </Directory>
</VirtualHost> 

<VirtualHost *:80> 
  ServerName www.test.com 
  Redirect permanent / http://test.com/
</VirtualHost>
  • siteの有効化
sudo a2ensite ***
sudo aptitude install sendmail
sudo aptitude install imagemagick
  • RMagickのインストール
sudo aptitude install libmagick9-dev
gem install rmagick
  • AMIの登録
# 証明書の転送
scp -i AWS_KEY.pem cert-***.pem ubuntu@ec2-***.compute-1.amazonaws.com:/home/ubuntu
scp -i AWS_KEY.pem pk-***.pem ubuntu@ec2-***.compute-1.amazonaws.com:/home/ubuntu

# sshで接続、証明書を/mntディレクトリへ移動
ssh -i ***.pem ubuntu@***
sudo cp cert-***.pem /mnt
sudo cp pk-***.pem /mnt
cd /mnt/

# ERROR: You need to be root to run /usr/local/ec2-ami-tools-1.3-57676/lib/ec2/amitools/bundlevol.rbと怒られるのでrootに

su
source /home/ubuntu/.bash_profile

# イメージを作成する
ec2-bundle-vol -d /mnt  --cert cert-***.pem --privatekey pk-***.pem --user *** --fstab /etc/fstab
# Please specify a value for arch [i386]:と聞かれたらそのままリターン

amitools/crypto.rb:13:in `require': no such file to load -- openssl (LoadError)とエラーになるようなら
sudo apt-get install libopenssl-ruby 

# S3にイメージを送る
ec2-upload-bundle --bucket BUCKET_NAME --manifest image.manifest.xml --access-key *** --secret-key ***

# イメージを登録する
ec2-register BUCKET_NAME/image.manifest.xml -n BUCKET_NAME  --cert dert-***.pem --private-key pk-***.pem

# 自分で登録したAMIを確認したい時は
ec2-describe-images -o self

# AMIの削除
ec2-deregister ami-***

EXC_BAD_ACCESSのエラーが出たら。。。

大抵の問題はオブジェクトのretain忘れです。
すでに開放されているオブジェクトにあとからアクセスしようとして、
「そんなオブジェクトはもうないよ」、
と怒られているというのが真相のようです。

なので、autorelease、releaseのタイミングを疑ってみるとよいです。


http://www.iphonedevsdk.com/forum/iphone-sdk-development/925-exc_bad_access.html

CentosのMySQLで文字化けに苦しんだら...

/etc/my.confに

default-character-set = utf8
skip-character-set-client-handshake

も追加した。

mysql> show variables like 'character_set%';

とやっても文字コードはutg8のはず...


むろん、

mysql> status
--------------
mysql  Ver 14.12 Distrib 5.0.45, for redhat-linux-gnu (i686) using readline 5.0

Connection id:          2
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.0.45 Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 1 min 38 sec

Threads: 1  Questions: 4  Slow queries: 0  Opens: 12  Flush tables: 1  Open tables: 6  Queries per second avg: 0.041
--------------

こうなっている!という方。


ここれが最後の答えかも。

以下の方法でコード上からMySQLの文字コードを取得する。

=========================================
#!/usr/bin/ruby -Ku

require 'mysql'

my = Mysql.init()
my.real_connect("localhost", "user", "password", "DBname")
p my.character_set_name()
=========================================

結果:"latin1"らしい。


mysql_options()のパラメータで文字コードを設定できるらしい。

=========================================
#!/usr/bin/ruby -Ku

require 'mysql'

my = Mysql.init()
my.options(Mysql::SET_CHARSET_NAME, "utf8")
my.real_connect("localhost", "user", "password", "DBname")
p my.character_set_name()
=========================================


けいさん、ありがとうございました!
けいの開発記録



追記:
成果物公開しました。
芸能人ブログで紹介されている商品が検索できるサイト | セレブログ

Centosのrailsにmysqlドライバーをインストールしましょう。

wget http://tmtm.org/downloads/mysql/ruby/mysql-ruby-2.8.1.tar.gz
tar xvf mysql-ruby-2.8.1.tar.gz
cd mysql-ruby-2.8.1.tar.gz
ruby extconf.rb --with-mysql-config=/usr/bin/mysql/mysql_conf
# テストを行う場合
ruby ./test.rb -- hostname user passwd dbname
make install


詳細はこちらを参照のこと。
http://www.tmtm.org/ja/mysql/ruby/

rubyのクラスメソッドについて

理解があやふやだったのですが、
この記事を読んでスッキリと霧が晴れました。

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/31193


1. Rubyのメソッドは、次の2種類に分けられます。
- インスタンスメソッド
- 特異メソッド

1.1. インスタンスメソッドは、そのクラスのインスタンスはどれでも使えま
す。これに関しては特に理解に問題はないかと思います。

	例:
	class A
	  def a
	    print "a"
	  end
	end
	
	a1 = A.new
	a2 = A.new
	a1.a	# => "a"
	a2.a	# => "a"

1.2. 特異メソッドは、ある特定のオブジェクトだけが使えるメソッドです。
これを定義するには、通常、"def クラス名.メソッド名" という書式を
使います(*1)。

	例:
	a3 = A.new
	def a3.aa
	    print "aa"
	end
	a3.aa	# => "aa"
	a1.aa	# => エラー

この特異メソッドの概念は、C++Javaにはないものです。

2. Rubyでは、クラスも一つのオブジェクトです。
クラスを定義するということは、クラスオブジェクトを一つ生成するとい
うことでもあります。クラスAを定義すると、Aというクラスオブジェクト
が作られるわけです。
クラスメソッドは、このクラスオブジェクトが持つ特異メソッドです(*2)。

	例: (1.2の例と見比べてみてください)
	def A.aaa
	    print "aaa"
	end
	A.aaa	# => "aaa"

クラスメソッドを使えるのはクラスオブジェクトAという特定のオブジェク
トだけですから、そのクラスのインスタンスa1、a2、a3では使えません。

例:
a1.aaa # => エラー

2.1. 但し、クラスオブジェクトは、特異メソッドに関して通常のオブジェク
トとは少し異なった特殊な振る舞いをします。

2.1.1. クラスオブジェクトは、上位クラスの特異メソッドを受け継ぎます。
これは「ある特定のインスタンスだけが使える」という特異メソッド
の性質に対する例外です(*3)。

	例:
	class B < A
	end
	
	B.aaa	# => "aaa"

2.1.2. (ほかにありましたっけ?)

2.2. いってみれば、Rubyでは、クラスオブジェクトの特異メソッドを、
2.1節のような特殊な取り扱いをすることで、C++Javaのクラスメソッド
を「模倣」しているのだ、といえます。
ですから、Rubyの世界をストレートに理解するためには、クラスメソッド
という概念をことさらに意識する必要はないと思います。