さくらインターネットはご存知だろうか?

メールサーバやSSHログインして結構自由にできちゃうレンタルサーバなんかを
かなり安価な値段で使えるインフラ屋さんである。
昔はさくらのフレッツ接続って固定IPが標準でついてくる超激安ISPもやっていたのだが、
大分前から新規募集を停止してしまっている。
…何時の日か復活して欲しいものである。

話がそれた。で、このさくらインターネット、結構RubyonRailsをデプロイする先としては有名で、
色んなところで取り上げられている。もちろんここでも取り上げる。
特にローカル環境で開発したアプリケーションをさくらにアップして動かせるようにするということを目的に行う。

そのためただ環境を構築するだけでなく、ちゃんと開発環境とあわせるようにする。

さくらインターネットでのRubyonRailsのデプロイ方法をメモ。まずは開発環境とのバージョン合わせから。
実際のデプロイ作業に関しては次回。

まず、RailsやRubyが初期状態ではさくらインターネット側の更新に影響されてしまうので、
ローカルでバージョンを固定して使用できるようにする。

開発していた環境と同じRubyとRailsにする。
この場合は

Ruby=1.8.6
Rails=2.2.2

とする。
このあたりは各自の事情とか状況とか欲望とかに合わせて設定してくだちい。

ちょっと場所が場所なのでファイルの場所に注意する。

mkdir src
cd src/

wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p383.tar.gz

tar zxvf ruby-1.8.6-p383.tar.gz

cd ruby-1.8.6-p383

./configure --prefix=$HOME/local

make

make install

vi ~/.cshrc

setenvと書かれているところに

setenv RUBYLIB $HOME/local/lib/ruby/1.8:$HOME/local/lib/ruby
setenv GEM_HOME $HOME/local/lib/ruby/gem

を追加する。一行目がRubyのパスで、二行目がこれから入れるRubyGemsのパスとなる。

set path = ( $HOME/local/bin $HOME/local/lib/ruby/gem/bin /sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin $HOME/bin )

setenv  EDITOR  vi
setenv  PAGER   more
setenv  BLOCKSIZE       K
setenv  PKG_DBDIR       ~/db/pkg
setenv RUBYLIB $HOME/local/lib/ruby/site_ruby/1.8:$HOME/local/lib/ruby
setenv GEM_HOME $HOME/local/lib/ruby/gem

で、次はGemsのインストール。
cd $HOME/src/

wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz

tar zxvf rubygems-1.3.5.tgz

cd rubygems-1.3.5

ruby setup.rb

そして仕上げのRailsインストール。
バージョンを指定してインストールすることを忘れない。
gem install rails -v2.2.2 --include-dependencies

%ruby -v
ruby 1.8.6 (2009-08-04 patchlevel 383) [i386-freebsd7.1]

%rails --version
Rails 2.2.2

うまくいったようだ。ではさっそくデプロイ前にテストしてみる。

rails test
/home/xxxxxxx/local/lib/ruby/gem/gems/rails-2.2.2/bin/../lib/rails_generator/options.rb:32:in `default_options': undefined method `write_inheritable_attribute' for Rails::Generator::Base:Class (NoMethodError)
        from /home/xxxxxxx/local/lib/ruby/gem/gems/rails-2.2.2/bin/../lib/rails_generator/base.rb:90
        from /home/xxxxxxx/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
        from /home/xxxxxxx/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'

        from /home/xxxxxxx/local/lib/ruby/gem/gems/rails-2.2.2/bin/../lib/rails_generator.rb:34
        from /home/xxxxxxx/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
        from /home/xxxxxxx/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'

        from /home/xxxxxxx/local/lib/ruby/gem/gems/rails-2.2.2/bin/rails:13
        from /home/xxxxxxx/local/lib/ruby/gem/bin/rails:19:in `load'
        from /home/xxxxxxx/local/lib/ruby/gem/bin/rails:19

…うまくいかないのが醍醐味だよねー

いつもの如くググりんぐ。

require 'rubygems'
require 'activesupport'

を試してみよとのこと。

irb
require 'rubygems'
=> true
require 'activesupport'
LoadError: no such file to load -- iconv

どうやら参考サイトと同様の現象のよう。安心した。

で、対処作。
先ほどRubyをインストールするときに展開したフォルダへ移動する。

cd $HOME/src/ruby-1.8.6-p383/ext/iconv/

ruby extconf.rb --prefix=$HOME --with-iconv-dir=/usr/local

make

make install

/usr/bin/install -c -m 0755 iconv.so /home/xxxxxxx/local/lib/ruby/site_ruby/1.8/i386-freebsd7.1

と表示されれば成功。では改めて

cd $HOME/rails/

rails test
      create 
      create  app/controllers
      create  app/helpers
      create  app/models
      create  app/views/layouts
      create  config/environments
      create  config/initializers
      create  config/locales
      create  db
        ~省略~
      create  public/javascripts/dragdrop.js
      create  public/javascripts/controls.js
      create  public/javascripts/application.js
      create  doc/README_FOR_APP
      create  log/server.log
      create  log/production.log
      create  log/development.log
      create  log/test.log

成功した。

そして起動確認。
普通に

ruby script/server

でいつものようにhttp://サーバー名:3000でおなじみのウェルカム画面が表示されるはず。

デーモン化。

ruby script/server -d

停止させたい場合は通常のサーバと同じように

ps aux

でPIDを調査し


kill -KILL PID

で停止させる。-KILLオプションをつけないと停止しないので注意。

他サイトでは上記手段ではなくさくらインターネットでしかしないような/htaccessの変更や
シンボリックリンクを張るという手順を見かけるが、ありゃ一体なんなんだろう…。

とりあえず今回の最低限の環境構築は終了。

次回は実際のアプリケーションをデプロイします。

参考サイト
http://tomonori855.sakura.ne.jp/recipe/2006/05/ruby_on_rails.html
http://www.fishowl.com/web/cat21129514/index.html
http://blog.proj.jp/ituki/20090107.html
http://t100life.blog121.fc2.com/blog-entry-148.html