Hatena::ブログ(Diary)

このブログは証明できない。

2007-05-26

[][]ロリポップRuby on Railsを動かす方法

ロリポップと言えば、格安レンタルサーバーの代表格だと思います。6ヶ月または12ヶ月契約なら月額263円(2007/05/26現在)です。標準でRubyが使えるのですが、Ruby on Railsも動かすことができます。

このページを参考にしました。やり方を変えているところがありますが、動作確認済みです。


まずは、Railsアプリのディレクトにコピーします。RAILS_ROOT/vendorの下にRailsがあると、そちらが優先的に使われます。Railsのコピーはコマンド一発で行えます。RailsをRAILS_ROOT/vendorにコピーすることをRailsをfreezeすると言います。ただし、Subversionクライアントが必要ですので、下のサイトからダウンロードしてインストールください。

rakeを使ってRailsをfreezeします。

rake rails:freeze:edge

この場合、ローカルのRailsではなく最新バージョンのRailsがfreezeされますから、古いRailsで開発してる場合にはアプリに不具合が出るかもしれません。その場合は、Railsのバージョンを指定します。

rake rails:freeze:edge REVISION=4021

または

rake rails:freeze:edge TAG=rel_1-1-0

ついでにgemもfreezeします。この作業に意味があるかどうかは分かりませんが。gemで何かをインストールしている人は効果があるかもしれません。

rake rails:freeze:gems

ちなみに、freezeを解除するには下のコマンド実行します。

rake rails:unfreeze

pruductionモードで動かす場合は、RAILS_ROOT/config/environment.rbの以下の行のコメントアウトを解除します。

ENV['RAILS_ENV'] ||= 'production'

RAILS_ROOT/public/dispatch.cgiの先頭行をロリポップRubyのパスに合わせて修正します。

#!/usr/local/bin/ruby

RAILS_ROOT/public/.htaccessのRewriteRuleより上に1行追加します。

RewriteBase /アプリディレクトリ

RAILS_ROOT/config/database.ymlを環境に合わせて修正します。環境はユーザー専用ページで確認できます。


データベースにテーブルを作成します。ロリポップではphpMyAdminが使えます。ローカルでphpMyAdminエクスポートかmysqldumpコマンドを利用してでテーブルを作成するSQL文を作成します。それをロリポップphpMyAdmin上から実行してテーブルを作成します。


Railsアプリアップロードします。アップロードしたらRAILS_ROOT/public/dispatch.cgiパーミッションを755に変更します。


RAILS_ROOT/publicへのシンボリックリンクを作成します。下のコードをcgiという拡張子で保存して、サーバーのルートにアップロードします。ブラウザからcgiファイルにアクセスすると、シンボリックリンクが作成されます。

#!/usr/local/bin/ruby

print "Content-type: text/html\n\n"
begin
  File.symlink('アプリディレクトリ/public', 'アプリ名')
  print "OK"
rescue
  print "NG"
end

Windowsショートカットと違って、アプリディレクトリアプリ名は同一にはできませんので注意してください。cgiが500エラーを返す場合は「ロリポップでRubyを動かすときの注意点」を参考にしてみてください。


準備完了です。ブラウザからアプリアクセスしてみてください。ものすごーく遅いレスポンスが待っていますよ。これくらい。


最後にアプリ作成時の注意点です。ロリポップMySQLはバージョンが4.0です。サブクエリがサポートされるのが4.1からなので、サブクエリは使えません。私もはまってしまいました。その他にもサポートしていない機能があるかもしれませんので、注意してください。