woshidan's blog

そんなことよりコードにダイブ。

Apacheが動いているのにWEBrickも動かしちゃった時のassetsの話1

Apache+Phusion PassengerでRailsがすでに動いているのに、
ポート番号3000でWEBrickをわざわざ起動させてしまいassetsが取得できなくて焦った時の小話。
そのときは、assetsが部分的に読み込めたり読み込めなかったりしたもので意味が分からなかったです。

まあ、production環境で

config.serve_static_assets = false
config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
config.assets.compile = true

の設定をしていたから、
assets:precompileをしてprecomileしたファイルをpublicディレクトリにおいていないのが
悪いと言われればおわりですが。

少し面白かったので、まとめておきます。


WEBrickで動かしていたRailsアプリケーションにアクセスするためのURLをRails.root:3000としています。

404になったものそうでないもの

最初に読み込めたファイルと404になったファイルをまとめておきます。

読み込めたもの
  • views内のhtml
  • Rails.root:3000/404で404.html
読み込めなかったもの
  • css,js
  • publicディレクトリ以下の画像。
  • Rails.root:3000/500で500.html
  • Rails.root:3000/422で422.html 

views内のhtmlが見れる

ビューはWEBRickが動かしているRailsのアプリケーションが読み取って、
Rubyで書き出しているので、routes.rbの記述に則っているurlであれば素材を読み取っているのではなくて、
サーバのプログラムの出力を見ているので、そのときは気づかなかったんですが、assets関係ないですね。

404,422,500

public以下のエラーの時に表示するhtmlのアドレスで422.htmlや500.htmlは見つからなかったのに、
404.htmlだけ見つかったというより、全部ファイルが見つかってないのでWEBrickが404のページのコードを吐き出してるだけなんじゃないでしょうか。

この2つを見ていると、Railsを動かしているサーバが動的に吐き出しているhtmlのコードについては見れそうです。

 

訂正

precompileが関係あるとしたら矛盾しないか?と思って、

ログをもう一回見直したら、

application.jsを後でいじっていたときの話と混同してました。すみません。

precompile関係なさそうだし、assetsは読み込めてなかったです。

 

せっかくなので、もう少しヘルパとかの話を続けます。