为什么stylesheet_link_tag没有链接到生产中的/ assets?

Mar*_*uis 13 ruby-on-rails sprockets asset-pipeline

我刚刚为新的Rails 3.1应用程序进行了第一次部署,但资产似乎无法正常工作.我在部署时预编译了所有内容,它会public/assets像预期的那样出现.但是,例如stylesheet_link_tag "application"在我的布局中的输出有一个href指向/stylesheets/application.css.这显然不起作用.

奇怪的是,在开发模式下,一切似乎都很好,它/assets/application.css与预期相似.

我将我config/application.rbconfig/environments/production.rb文件与我们在资产管道上的另一个应用程序进行了比较,相关设置似乎是相同的.

我应该在哪里看?

Ric*_*lse 14

当助手生成此代码时:

/stylesheets/application.css
Run Code Online (Sandbox Code Playgroud)

这是因为在您处于的任何模式下都没有启用管道.有几个可能的原因.

  • 您在错误的配置文件中启用了管道.(应在application.rb配置文件中启用管道)

  • 您已在application.rb中启用它并在其他位置禁用它.

  • 你不小心在某个地方评论过铁路

有关详情,请参阅此问题.

如果这是升级后的应用程序,请检查管道指南最后一部分中的所有配置选项,以确保正确设置它们.

  • 谢谢你指点我正确的方向.我不需要所有的Rails(仅限mongodb应用程序),并且缺少一个`require'链轮/铁路"`.仍然不确定为什么这在开发中无关紧要. (7认同)

Gui*_*eba 7

我知道这是针对rails 3.1但是轨道4的用户可能会发生非常类似的错误,所以为了完整性和帮助未来的googlers.最可能的原因是您没有将该资产添加到production.rb中的预编译指令,它看起来像这样:

# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
config.assets.precompile += %w(  )
Run Code Online (Sandbox Code Playgroud)

正如OP所说,application.css没有被添加,症状是url以/ stylesheets或/ javascripts而不是资产开头.所以解决方案是

config.assets.precompile += %w( your_assets.css your_assets.js )
Run Code Online (Sandbox Code Playgroud)