Ruby on Rails 2.2.2 をさくらスタンダードにインストール

先日思い立ってやってみたときのメモを置いてみます。参考サイトは適宜リンク。

以下 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 でテスト

[~] % 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 を指定してインストールする方法に修正。