Tuesday, August 21, 2007

さくらのレンタルサーバーにRuby on Railsをインストールする方法 その2

スポンサードリンク

前回、さくらのレンタルサーバにRuby on Railsをインストールする方法でrubygemsとRuby on Railsのインストールができたので、こんどは試しに動かしてみます。

まずはRailsのアプリケーションのディレクトリを作成。場所はどこでもいいですが、webでみられないところにしてください。さくらのレンタルサーバーでいうと ~/www 以外ですね。のちほど、公開用のディレクトリだけ、~/www以下からシンボリックリンクを張ります。ここでは~/Rails以下にRailsのアプリケーションをまとめておくことにして、今回のテスト用のアプリケーション「test」(そのまま!)をその下におきます。

% cd
% mkdir Rails
% cd Rails
% rails test
      create  
      create  app/controllers
...(略)...
      create  log/development.log
      create  log/test.log
% ls -l
total 2
drwxr-xr-x  14 narak  users  512 Aug 22 13:03 test/
% cd test
% ls -l
total 34
-rw-r--r--  1 narak  users  8001 Aug 22 13:03 README
-rw-r--r--  1 narak  users   307 Aug 22 13:03 Rakefile
drwxr-xr-x  6 narak  users   512 Aug 22 13:03 app/
drwxr-xr-x  2 narak  users   512 Aug 22 13:03 components/
drwxr-xr-x  3 narak  users   512 Aug 22 13:03 config/
drwxr-xr-x  2 narak  users   512 Aug 22 13:03 db/
drwxr-xr-x  2 narak  users   512 Aug 22 13:03 doc/
drwxr-xr-x  3 narak  users   512 Aug 22 13:03 lib/
drwxr-xr-x  2 narak  users   512 Aug 22 13:03 log/
drwxr-xr-x  5 narak  users   512 Aug 22 13:03 public/
drwxr-xr-x  4 narak  users   512 Aug 22 13:03 script/
drwxr-xr-x  7 narak  users   512 Aug 22 13:03 test/
drwxr-xr-x  6 narak  users   512 Aug 22 13:03 tmp/
drwxr-xr-x  3 narak  users   512 Aug 22 13:03 vendor/

できた。できたら、いくつか設定を変更します。

まずはディレクトリとファイルのパーミッション関係。test/log と test/tmp はwebサーバー経由で起動されたrubyに書き込み権限がないといけません。したがって、o+wにしちゃう。-Rオプションを忘れずに。

% chmod -R o+w log tmp
% ls -l
total 34
-rw-r--r--  1 narak  users  8001 Aug 22 13:03 README
-rw-r--r--  1 narak  users   307 Aug 22 13:03 Rakefile
drwxr-xr-x  6 narak  users   512 Aug 22 13:03 app/
drwxr-xr-x  2 narak  users   512 Aug 22 13:03 components/
drwxr-xr-x  3 narak  users   512 Aug 22 13:03 config/
drwxr-xr-x  2 narak  users   512 Aug 22 13:03 db/
drwxr-xr-x  2 narak  users   512 Aug 22 13:03 doc/
drwxr-xr-x  3 narak  users   512 Aug 22 13:03 lib/
drwxr-xrwx  2 narak  users   512 Aug 22 13:03 log/
drwxr-xr-x  5 narak  users   512 Aug 22 13:03 public/
drwxr-xr-x  4 narak  users   512 Aug 22 13:03 script/
drwxr-xr-x  7 narak  users   512 Aug 22 13:03 test/
drwxr-xrwx  6 narak  users   512 Aug 22 13:03 tmp/
drwxr-xr-x  3 narak  users   512 Aug 22 13:03 vendor/

次は環境ファイルの設定。場所はtest/configの下の「environment.rb」です。ロードパスを追加するのと、環境変数GEM_HOMEの設定を追加。diffをとるとこんなかんじ。3行追加ですからviで編集するか、下のようなpatchをあてるか、どうにかしてください。もちろん「/home/narak」のところはご自分のホームディレクトリに変更してくださいね。

% diff -u config/environment.rb.org config/environment.rb
--- config/environment.rb.org   Wed Aug 22 13:20:58 2007
+++ config/environment.rb       Wed Aug 22 13:20:47 2007
@@ -1,4 +1,8 @@
 # Be sure to restart your web server when you modify this file.
+$LOAD_PATH.push("/home/narak/lib/ruby/site_ruby/1.8")
+$LOAD_PATH.push("/home/narak/lib/ruby")
+
+ENV['GEM_HOME'] ||= '/home/narak/lib/ruby/gem'
 
 # Uncomment below to force Rails into production mode when 
 # you don't control web/app server and can't set it the proper way

上記は、要するにインストールのところで~/.cshrcに設定した環境変数「RUBYLIB」と「GEM_HOME」ですね。Railsのアプリケーションがwebサーバ経由で動くときは、当然ユーザとは違うuidでうごきますから、 ~/.cshrcで環境変数設定しても全然関係ない。だからこのconfig/environment.rbにかかなくちゃいけないってわけ。実は前の記事を書いたあと、すぐこの記事を書こうと思ったのだが、これでハマって時間がかかってしまった。 だいぶコードを読んだので、おかげさまでrubygemsに詳しくなりました ^^; GEM_HOMEめー。

config/environment.rbが終わったら次はpublic/.htaccessです。このpublicディレクトリが公開用のディレクトリになります。さくらのレンタルサーバーではOptionsは無効なので、これをコメントアウト しておかないとエラーになっちゃいます。AddHandlerもいらないのでコメントアウト。

% diff -u public/.htaccess.org public/.htaccess
--- public/.htaccess.org        Wed Aug 22 13:35:07 2007
+++ public/.htaccess    Wed Aug 22 13:34:26 2007
@@ -1,7 +1,7 @@
 # General Apache options
-AddHandler fastcgi-script .fcgi
-AddHandler cgi-script .cgi
-Options +FollowSymLinks +ExecCGI
+#AddHandler fastcgi-script .fcgi
+#AddHandler cgi-script .cgi
+#Options +FollowSymLinks +ExecCGI
 
 # If you don't want Rails to look in certain directories,
 # use the following rewrite rules so that Apache won't rewrite certain requests

さー、これでいよいよ準備が整いました。webからみられる場所からtest/publicに向けてシンボリックリンクを張ります。今回は~/wwwの直下に「test」という名前でシンボリックリンクを作りました。こんなかんじ。

% ln -s $HOME/Rails/test/public $HOME/www/test

これで、http://narak.sakura.ne.jp/test/にアクセスすると下のような「Welcome aboard」画面が出ます。

welcome-aboard2.jpg

図1. Welcome abord

続いて「About your application's environment」をクリックしてみます。

for-security-purpose.jpg

図2. About your application's environment

図2のように「For security purposes, this information is only available to local requests.」と出ればRailsは正常動作しています。とりあえずパチパチ!

トラブルシューティング

上記の図1、図2のようにならなかった場合ですが、まず図1の画面が出ず、図3のように 「Internal Server Error」が出る場合。これはpublic/.htaccessにエラーがあると思われます。 ちゃんと「Options」をコメントアウトしたかどうかチェックしましょう。

internal-server-error.jpg

図3. Internal Server Error

次に図1の画面は出るのだが、図2のところで「Application error Rails application failed to start properly"」と出る場合(図4)。この場合は、config/environment.rbでENV['GEM_HOME']がセットされていないと思われます。ちゃんとENV['GEM_HOME'](と$LOAD_PATH)の行を追加したかチェックしましょう。

application-error.jpg

図4. Application error

というわけで、いちおう動作できました。次回はデータベースの設定をして、簡単なアプリケーションでも作ってみましょう。さくらのレンタルサーバでRuby on Railsをうごかしてみたら...ヘ続く。

参考文献

  1. Ruby on Rails
  2. RubyGems Manuals
  3. Application Error - Rails application failed to start properly, Hoopla!, 2006
  4. RubyOnRails(さくらサーバ編)
  5. さくらのレンタルサーバにRuby on Railsをインストールする方法(その1), がんちゃんのブログ, 2007

1 comment:

Anonymous said...

こんにちは。
Ruby on Railsをさくらサーバーにインストールしてみようと思い格闘しています。

Railsもgemもインストールでき、.htaccessも直してみたのですが、ページにアクセス「Forbidden」permissionがありませんと出てしまいました。

なにがいけないのか、さっぱりわからず思い切って質問しています。