愚かな原因によるlighttpdの404エラー
ここ数日Railsの配置を学んで、Robbinに大いに
LinuxプラットフォームでのRuby on Railsのインストールと構成の詳細という熱い血が沸き、手をこすってlighttpd+FastCGIで配置を試してみるつもりだ.先輩の道を行くのは比較的平坦だと言わざるを得ない.すべての構成が完了すると、lighttpdサーバが起動し、問題が発生し、静的ページにアクセスしても問題はありませんが、ダイナミックページは404ページ表示されます.
次に、理由を検索します.
dispatch.fcgiには確かに実行権限があり、コンソールで手動で呼び出しても結果を正しく返すことができます.
errorlogは大丈夫です.accesslogは404の山を記録しても正常です.
Railsのロゴは何も覚えていないので、Rails配布器がトリガーされていないことを示しています.
プロセスを表示し、lighttpdサーバプロセスといくつかのdispatchを起動しました.fcgiプロセス.
最後に気づいたのはconfで$HTTP["host"]を書き間違えました.
配備を試みるだけなので、Railsはdevelopment環境を設定し、プロジェクトも本機にあり、
だからconfプロファイルは次のとおりです.
ブラウザで叩いたダイナミックページのURLは次のとおりです.http://localhost/test
問題はこの文にある
Lighttpdは「127.0.0.1」と「localhost」が異なるアドレスだと考えていますが...urlには「127.0.0.1」しか使えず、lighttpdは404エラーを直接投げるのではなく、この呼び出しRails配布器であることを正しく認識できます.
解決方法は簡単で、以下の2つの形式のいずれかに変更すればいいです.
ちなみにこの2つの方法の違いは、
$HTTP["host"=="localhost"この方式はlocalhostに任意のポートを追加することができ、Railsプロジェクトがサブドメイン名を使用していない場合、この書き方は最も簡単で、最も間違いにくい.
$HTTP["host"=~"^localhost"はドメイン名+ポート番号と正規表現をマッチさせるので、この正規"^localhost$"はマッチしませんhttp://localhost:3000「はい、完全に一致するには「^localhost:3000$」しか使えません.もちろん、実際には正則をこんなに死ぬ人はいません.これは例にすぎません.
LinuxプラットフォームでのRuby on Railsのインストールと構成の詳細という熱い血が沸き、手をこすってlighttpd+FastCGIで配置を試してみるつもりだ.先輩の道を行くのは比較的平坦だと言わざるを得ない.すべての構成が完了すると、lighttpdサーバが起動し、問題が発生し、静的ページにアクセスしても問題はありませんが、ダイナミックページは404ページ表示されます.
次に、理由を検索します.
dispatch.fcgiには確かに実行権限があり、コンソールで手動で呼び出しても結果を正しく返すことができます.
errorlogは大丈夫です.accesslogは404の山を記録しても正常です.
Railsのロゴは何も覚えていないので、Rails配布器がトリガーされていないことを示しています.
プロセスを表示し、lighttpdサーバプロセスといくつかのdispatchを起動しました.fcgiプロセス.
最後に気づいたのはconfで$HTTP["host"]を書き間違えました.
配備を試みるだけなので、Railsはdevelopment環境を設定し、プロジェクトも本機にあり、
だからconfプロファイルは次のとおりです.
$HTTP["host"] == "127.0.0.1" {
server.document-root = "/yourrails/public"
server.error-handler-404 = "/dispatch.fcgi"
fastcgi.server = (".fcgi" =>
("localhost" =>
("minprocs" => 10,
"maxprocs" => 10,
"socket" => "/tmp/rails.socket",
"bin-path" => "/yourrails/public/dispatch.fcgi",
"bin-environment" => ("RAILS_ENV" => "development")
)
)
)
}
ブラウザで叩いたダイナミックページのURLは次のとおりです.http://localhost/test
問題はこの文にある
$HTTP["host"] == "127.0.0.1"
Lighttpdは「127.0.0.1」と「localhost」が異なるアドレスだと考えていますが...urlには「127.0.0.1」しか使えず、lighttpdは404エラーを直接投げるのではなく、この呼び出しRails配布器であることを正しく認識できます.
解決方法は簡単で、以下の2つの形式のいずれかに変更すればいいです.
# ,
$HTTP["host"] == "localhost"
# ,
$HTTP["host"] =~ "^localhost"
ちなみにこの2つの方法の違いは、
$HTTP["host"=="localhost"この方式はlocalhostに任意のポートを追加することができ、Railsプロジェクトがサブドメイン名を使用していない場合、この書き方は最も簡単で、最も間違いにくい.
$HTTP["host"=~"^localhost"はドメイン名+ポート番号と正規表現をマッチさせるので、この正規"^localhost$"はマッチしませんhttp://localhost:3000「はい、完全に一致するには「^localhost:3000$」しか使えません.もちろん、実際には正則をこんなに死ぬ人はいません.これは例にすぎません.