Ruby on Rails 2.2.2 をさくらスタンダードにインストール
先日思い立ってやってみたときのメモを置いてみます。参考サイトは適宜リンク。
- がんちゃんのブログ: さくらのレンタルサーバーにRuby on Rails 2.0.2をインストールする方法
- Ruby on Rails入門3 さくらインターネットにRuby on Railsをインストール - nyon2.net
以下 ID は FOOBAR で foobar.net というドメインと関連づけられているものとします。現時点で 2.3.2 ではうまく動かせていないので 2.2.2 を指定。
gems をインストールしてからそれを利用して rails をインストール、という手順だが、その前に ~/.cshrc に必要な環境変数を追加しておく。参考サイトでは gems のインストール後にこの作業を行っているが、いろいろ試した結果、先にやっておいたほうが何かと便利。
[~] % vi ~/.cshrc
(...) setenv GEM_HOME $HOME/local/lib/gems/1.8 setenv PATH ${GEM_HOME}/bin:$PATH setenv RUBYLIB ${GEM_HOME}/lib (...)
[~] % source ~/.cshrc
Ruby のバージョンを確認し、作業用ディレクトリを作って移動
[~] % ruby --version ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-freebsd7] [~] % mkdir ~/local/src [~] % cd ~/local/src
rubygems-1.3.1 をダウンロード、解凍。
[~/local/src] % wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz [~/local/src] % tar xvf rubygems-1.3.1.tgz [~/local/src] % l ./ ../ rubygems-1.3.1/ rubygems-1.3.1.t gz
ディレクトリに移動してインストール
[~/local/src] % cd rubygems-1.3.1 [~/local/src/rubygems-1.3.1] % ruby setup.rb --prefix=$GEM_HOME mkdir -p /home/FOOBAR/local/gems/1.8/lib mkdir -p /home/FOOBAR/local/gems/1.8/bin mkdir -p /home/FOOBAR/local/gems/1.8/lib/rbconfig (...) RubyGems installed the following executables: /home/FOOBAR/local/gems/1.8/bin/gem18 If `gem` was installed by a previous RubyGems installation, you may need to remove it by hand.
リンク作成
[~/local/src/rubygems-1.3.1] % ln -sv gem18 $GEM_HOME/bin/gem /home/FOOBAR/local/lib/gems/1.8/bin/gem -> gem18
$PATH ハッシュを更新しつつ gems のバージョン確認。
[~/local/src/rubygems-1.3.1] % rehash [~/local/src/rubygems-1.3.1] % gem --version 1.3.1
ここから Rails のインストール。バージョン 2.2.2 、ドキュメントは入らないよう指定。
[~/local/src/rubygems-1.3.1] % gem install rails --version 2.2.2 --include-dependencies --no-rdoc --no-ri INFO: `gem install -y` is now default and will be removed INFO: use --ignore-dependencies to install only the gems you list Successfully installed rake-0.8.4 Successfully installed activesupport-2.2.2 Successfully installed activerecord-2.2.2 Successfully installed actionpack-2.2.2 Successfully installed actionmailer-2.2.2 Successfully installed activeresource-2.2.2 Successfully installed rails-2.2.2 7 gems installed [~/local/src/rubygems-1.3.1] % rails --version Rails 2.2.2
スムーズに完了。テストに移る。
SQLite でテスト
- Ruby on Rails入門4 さくらインターネットでサンプルアプリを作る - nyon2.net
- Ruby On Rails2.2で作るサンプルアプリケーション(ON さくらインターネット) - 大人になったら肺呼吸
[~] % mkdir ~/code/rails
[~] % cd ~/code/rails
[~/code/rails] % rails test
create
create app/controllers
create app/helpers
(...)
create log/production.log
create log/development.log
create log/test.log
[~/code/rails] %
ウェブから見えるところにシンボリックリンクを張る。ドメインを持ってない(使わない)場合は /home/ID/www/ 直下とかでも OK。
[~/code/rails] % ln -sv ~/code/rails/test/public ~/www/foobar.net/railstest
/home/FOOBAR/www/foobar.net/railstest -> /home/FOOBAR/code/rails/test/public
public/.htaccess を作る。Alias を有効にすると 503 を食らうのでコメントアウト。
[~] % vi ~/code/rails/test/public/.htaccess
#Alias /railstest /home/FOOBAR/code/rails/test/public RewriteEngine On RewriteBase /railstest/ RewriteRule ^$ index.html [QSA] RewriteRule ^([^.]+)$ $1.html [QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
http://foobar.net/railstest/ の "About your application’s environment" というリンクをクリックしてエラーを見ながら調整。
Ruby on Rails入門4 さくらインターネットでサンプルアプリを作る - nyon2.net にある通り、config/environment.rb の先頭にいろいろ追記する。 RAILS_RELATIVE_URL_ROOT は先ほど作ったシンボリックリンクとの整合性に注意。
[~] % vi ~/code/rails/test/config/environment.rb
# Be sure to restart your server when you modify this file $LOAD_PATH.push("/home/FOOBAR/local/lib/gems/1.8/lib") $LOAD_PATH.push("/home/FOOBAR/local/lib/gems/1.8/lib/rubygems") ENV['GEM_HOME'] ||= '/home/FOOBAR/local/lib/gems/1.8' ENV['RAILS_RELATIVE_URL_ROOT']="/railstest" (...)
テスト用にデフォルトの config/database.yml を利用するが、SQLite モジュールがない場合(no such file to load -- sqlite3)に入れる。
[~] % setenv RB_USER_INSTALL true
[~] % gem install sqlite3-ruby
ここまでやって改めて http://foobar.net/railstest/ を試してみると
Ruby version 1.8.6 (i386-freebsd7) RubyGems version 1.3.1 Rails version 2.2.2 Active Record version 2.2.2 Action Pack version 2.2.2 Active Resource version 2.2.2 Action Mailer version 2.2.2 Active Support version 2.2.2 Application root /home/FOOBAR/code/rails/test Environment development Database adapter sqlite3 Database schema version 0
のように表示されて、ひとまず成功。まとめると大した手順ではないけど、実際は疲れた……。
MySQL でテスト(MySQL 5.x を使用)
データベースを作っておく。
CREATE TABLE FOOBAR.`bookmarks` ( `id` int(11) NOT NULL default '0', `name` varchar(255) NOT NULL default '', `url` varchar(255) NOT NULL default '', PRIMARY KEY (`id`) ) TYPE=MyISAM;
rails 作成。 "rails bookmark -d mysql" としたほうがいいらしいのを後で知ったけど、これでもいけた。 database.yml 次第?
[~] % cd ~/code/rails
[~/code/rails] % rails testmysql
(...)
database.yml を作る。
[~/code/rails] % cd testmysql/config [~/code/rails/testmysql/config] % mv database.yml database.yml.default [~/code/rails/testmysql/config] % vi database.yml
development: adapter: mysql encoding: utf8 database: FOOBAR pool: 5 username: FOOBAR password: ******** host: mysqlNNN.db.sakura.ne.jp
シンボリックリンクを作る
% ln -s $HOME/code/rails/testmysql/public $HOME/www/foobar.net/testmysql
config/environment.rb に例のおまじないを追加。
[~/code/rails/testmysql/config] % vi environment.rb
# Be sure to restart your server when you modify this file $LOAD_PATH.push("/home/FOOBAR/local/lib/gems/1.8/lib") $LOAD_PATH.push("/home/FOOBAR/local/lib/gems/1.8/lib/rubygems") ENV['RAILS_RELATIVE_URL_ROOT']="/testmysql" (...)
ここまでやってテストすると mysql にうまく接続できていない(Client does not support authentication protocol requested by server)ようだったので、 gem で mysql モジュールをインストール。
[~/code/rails/testmysql/config] % setenv RB_USER_INSTALL true [~/code/rails/testmysql/config] % gem install mysql --no-rdoc --no-ri Building native extensions. This could take a while... Successfully installed mysql-2.7 1 gem installed
再び config/environment.rb を編集。例のおまじないと同時に mysql への依存関係も追加する。インストールしたときのバージョンをそのまま書く(なくても動いたけど)。
[~/code/rails/testmysql/config] % vi environment.rb
(...) # config.gem "sqlite3-ruby", :lib => "sqlite3" # config.gem "aws-s3", :lib => "aws/s3" config.gem "mysql", :version => "2.7" # この行を追加 (...)
これで動いた。
Ruby version 1.8.6 (i386-freebsd7) RubyGems version 1.3.1 Rails version 2.2.2 Active Record version 2.2.2 Action Pack version 2.2.2 Active Resource version 2.2.2 Action Mailer version 2.2.2 Active Support version 2.2.2 Application root /home/FOOBAR/code/rails/testmysql Environment development Database adapter mysql Database schema version 0
scaffold する。
% script/generate scaffold bookmark name:string url:string exists app/models/ exists app/controllers/ exists app/helpers/ create app/views/bookmarks exists app/views/layouts/ exists test/functional/ exists test/unit/ exists public/stylesheets/ create app/views/bookmarks/index.html.erb create app/views/bookmarks/show.html.erb create app/views/bookmarks/new.html.erb create app/views/bookmarks/edit.html.erb create app/views/layouts/bookmarks.html.erb create public/stylesheets/scaffold.css create app/controllers/bookmarks_controller.rb create test/functional/bookmarks_controller_test.rb create app/helpers/bookmarks_helper.rb route map.resources :bookmarks dependency model exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/bookmark.rb create test/unit/bookmark_test.rb create test/fixtures/bookmarks.yml create db/migrate create db/migrate/20090315170130_create_bookmarks.rb
http://foobar.net/testmysql/bookmarks にアクセスすると Listing bookmarks というページが表示された。
さくらスタンダードで rails できることだけでなく、手順や数々の罠の回避手段まで教もらえた参考サイト作成者のみなさまに感謝。
やたら重いので次は「さくらインターネットで gateway.cgi を使う@Rails 2.1.1 - なんとなく日記」かな。
追記(04/06): sqlite3 のテストでシンボリックリンクの張り方を間違えていた部分を修正。public ディレクトリを実体として指定する。
追記(04/08): gem install rails すると 2.3.2 がインストールされるようになり、さくら + dispatch.cgi ではうまく動かせなかったので 2.2.2 を指定してインストールする方法に修正。