Rails 3.1 Asset Pipeline无法通过nginx反向代理工作

时间:2011-08-22 21:25:35

标签: ruby-on-rails nginx ruby-on-rails-3.1 thin asset-pipeline

我正在将Rails 3.0应用程序升级到Rails 3.1,并且资产管道在开发中不起作用。我正在使用nginx反向代理瘦。

例如

javascript_include_tag 'application' # => <script src="/javascripts/application.js" type="text/javascript"></script>

卷曲......

$ curl -sL -w "%{http_code}" "http://myapp.dev/javascripts/application.js" -o /dev/null
404
$ curl -sL -w "%{http_code}" "http://myapp.dev/assets/application.js" -o /dev/null
404

但是当我直接点击瘦而不是通过nginx时,我得到了我期望的结果:

javascript_include_tag 'application' # => <script src="/assets/application.js" type="text/javascript"></script>

有效吗?

$ curl -sL -w "%{http_code}" "http://localhost:3000/assets/application.js" -o /dev/null
200

是的!为什么会出现这种情况?

以下是我的nginx配置的摘录:https://gist.github.com/1163638

很高兴提供更多信息,请问!

2 个答案:

答案 0 :(得分:1)

您是否修改了开发环境文件?默认情况下,资产管道工作仅在生产中发生。

答案 1 :(得分:1)

您的问题很可能是您需要预编译资产。尝试运行

rake assets:precompile

这是因为nginx会盲目地尝试为它应该提供的资产服务,不像ruby服务器会检查是否存在,如果它们不存在则编译。

我建议看Ryan Bates'screencast on the subject

编辑:

据我所知,如果文件不存在,没有办法让nginx将请求传递给后端,但是我对配置nginx并不是很熟悉,所以这可能是一个很好的问题在ServerFault上询问。