【问题标题】:Rails 4: Setting config.assets.compile to false deactivates whole SprocketsRails 4:将 config.assets.compile 设置为 false 会停用整个 Sprocket
【发布时间】:2015-06-11 09:09:14
【问题描述】:

我的 Rails 4 应用程序中的 CSS 和 Javascript 无法在生产环境中加载,但在 staging 中成功。 config/environments/staging.rbconfig/environments/production.rb 之间的唯一区别是这一行:

config.assets.compile = true 暂存,并且

config.assets.compile = false 在生产中。

在暂存和生产中,我在部署期间都打开rake assets:precompile。是的,指纹资产位于public/assets

我很想举手,大喊“见鬼,我还有其他东西要编码”,然后 just set config.assets.compile = true on production,但据我所知,这启用了实时编译,它可以动态编译 Sass 和 CoffeeScripts,而且我不希望在我们的实时网站上征收那种绩效税。

但是,在生产环境中设置 config.assets.compile = false 不会生成正确的指纹 URL 来正确指向预编译的资产。

在 staging 中,我的 application.css 很高兴地指向了https://staging.example.com/assets/application-8b1ca5ff4a98a7b28b0e932fe7412421.css。这很好,很好,很幸福,很棒。

在生产中,它令人沮丧地指向https://www.example.com/stylesheets/application.css

然后我如何在生产环境中使用不带实时编译的资产管道(Sprockets)?任何能在我头发枯竭之前帮助我的人都会非常感激。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    我想我知道答案。将我的发现留给未来的访客。

    这是我部署代码的部署系统 (Amazon OpsWorks) 中的时间问题,然后 assets:precompiled。第一次部署不起作用。然而,第二个确实如此。当所有app/assets 的md5sum 不变时,系统不会assets:precompile

    这让我得出以下结论

    如果config.assets.compile = false

    Rails 查找 public/assets/manifest-md5hash.json。如果存在,它会给出/assets/application-md5hash.css 指纹版本。如果不存在,则给出/stylesheets/application.css 版本。

    【讨论】:

      猜你喜欢
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-05
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      相关资源
      最近更新 更多