我正在将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
很高兴提供更多信息,请问!
答案 0 :(得分:1)
您是否修改了开发环境文件?默认情况下,资产管道工作仅在生产中发生。
答案 1 :(得分:1)
您的问题很可能是您需要预编译资产。尝试运行
rake assets:precompile
这是因为nginx会盲目地尝试为它应该提供的资产服务,不像ruby服务器会检查是否存在,如果它们不存在则编译。
我建议看Ryan Bates'screencast on the subject。
编辑:
据我所知,如果文件不存在,没有办法让nginx将请求传递给后端,但是我对配置nginx并不是很熟悉,所以这可能是一个很好的问题在ServerFault上询问。