【问题标题】:Rails 3.1 Asset Pipeline does not work through nginx reverse proxyRails 3.1 Asset Pipeline 不能通过 nginx 反向代理工作
【发布时间】:2011-08-22 21:25:35
【问题描述】:

我正在将 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

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

【问题讨论】:

  • 您最初生成/javascripts 而不是/assets 的示例表明一个更大的问题正在发生。你确定你做对了吗?

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


【解决方案1】:

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

【讨论】:

  • 出于某种原因,我的 development.rb 中有 config.serve_static_assets = false。翻转这个解决了问题。
  • 一旦您对设置感到满意,您可能希望在开发环境中将其关闭。没有充分的理由把它留在那儿。
【解决方案2】:

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

rake assets:precompile

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

我建议观看 Ryan Bates 的 screencast on the subject

编辑:

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

【讨论】:

  • 您能否详细说明“盲目尝试服务”?有没有办法让 Nginx 在发送 404 之前将此查询转发到 rails?
  • 大概你可以把你的 ruby​​ 服务器放在你的 try_files 子句中。
猜你喜欢
  • 2013-04-27
  • 1970-01-01
  • 2019-09-27
  • 2012-01-31
  • 1970-01-01
  • 2011-12-18
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多