Railsアプリを本番環境に配備する際の注意点

MacOS Xで作成したRuby on Railsアプリケーションを,今日Fedora Core 6に配備することにチャレンジした。もちろん一発でうまくいく訳もなく,いくつかハマり箇所があった。同じミスを繰り返さないためにも,ここに残しておく。 [rubyコマンドのパス] 作成したRailsアプリを,「 約5時間かかったRuby on Railsの実行環境構築」エントリで紹介したlighttpd実行環境にファイル一式コピー。lighttpd.confおよびhttpd.confにそれぞれ設定を記述し,まずlighttpdデーモンを再起動する。しかし,悲しいことに,

(mod_fastcgi.c.998) execve failed for: /…/rails/…/public/dispatch.fcgi No such file or directory

というエラーメッセージが表示され,lighttpdが起動してくれない。ファイルはしっかり存在するし,despatch.fcgiファイルのパーミッションも問題ない。そこで,試しにdispatch.fcgiファイルを直接値シェルから実行すると,「/usr/local/bin/rubyが見つからないぞ」というエラーメッセージ。なるほど,MacOS Xで開発していた環境では「/usr/local/bin/ruby」だったのだが,Fedora Core 6の環境は「/usr/bin/ruby」であることに気がつく。/usr/local/binにrubyのシンボリックリンクを作ることで,この問題は解決。 [log,tmpディレクトリのパーミッション] 無事にlighttpdが起動したように見えたが,「log/access.logが書き込めない」というエラーが発生。logおよびtmpディレクトリのパーミッションは設定したが,その中にあるファイルやサブディレクトリについてパーミッションを調整していなかった。設定を正しく施すことで,この問題も解決。 [index.htmlファイルの削除] やっと無事にアプリにアクセスすることができたが,railsコマンドで生成されるinde.htmlファイルの内容が表示されてしまう。格好悪いので,route.rbファイルに,

map.connect ‘’, :controller => ‘welcome’ # welcomeは作ったアプリ固有のもの

を書くも,反映せず。2分ほど悩むが,index.htmlファイルを消し忘れていたことに気がつく。さくっとpublic/index.htmlを消して,この問題も解決。 [MySqlのソケット] 普通に動き出したので,scaffoldで作った機能を呼び出すも,エラー画面が表示される。production.logを見ると,

Errno::ENOENT (No such file or directory - /tmp/mysql.sock):

と表示されている。あれ,違うの?と調べてみたところ,yumで楽々インストールしたmysqlは「/var/lib/mysql/mysql.sock」なことが判明。database.ymlのproduction項目を変更し,この問題も解決。 [productionデータベースへのマイグレーション] データベースに接続できるも,再度エラー画面が表示される。これは当たり前で,production用に作ったデータベースに何のスキーマも作っていない。rakeのmigrateタスクでスキーマを作ろうとするも,development用のデータベースを見にいってしまい,作られない。実はこれは,

rake environment RAILS_ENV=production migrate

というように環境を明示的に与えてやる必要があり,これを指定することでこの問題も解決。 ・・・というように,細かな点でハマるも,無事稼働確認ができた。うーん,環境依存な箇所でいくつかハマったという感じだ。こういうのって,何かしらソリューションがありそうなので,あとで調べてみたい。

このエントリーをはてなブックマークに追加

関連記事

2023年のRemap

Remapにファームウェアビルド機能を追加しました

Google I/O 2023でのウェブ関連のトピック

2022年を振り返って

現在のRemapと今後のRemapについて