【问题标题】:asset_path in Rails 4 is producing unhashed asset pathsRails 4 中的asset_path 正在生成未散列的资产路径
【发布时间】:2014-04-11 20:00:47
【问题描述】:

我有一个 Rails 4.0.3 应用程序,我有一个非常简单的图像标签:

<%= image_tag('logo_big.png') %>

在开发过程中,这按预期工作,一切都很愉快。然而,在生产中,标签仍然链接到图像的未散列版本:

<img alt="Logo big" src="/z/logo_big.png">

它应该将哈希附加到文件名,在这种情况下会产生“logo_big-21d3b1db0a8536f5717646dfea417791.png”。直接使用asset_path 也不起作用。 Javascript 和 CSS 文件链接都可以正常工作并正常附加哈希。

那为什么不包括哈希呢?

其他信息/混淆因素:

  • 我有一个备用资产前缀(“asset”是我的应用程序中的一个资源),即“z”
  • 我使用的是 Sass 3.2.19 (sass-rails 4.0.2)
  • 我正在使用 Compass 0.12.5(compass-rails 1.1.6)
  • 散列适用于每个模板中的图像,除了适用于布局模板。

【问题讨论】:

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


    【解决方案1】:

    您是否将 z 目录添加到 application.rb 中的资产路径?

    config.assets.paths << "#{Rails.root}/app/assets/z"
    

    还要检查一下这是否在 production.rb 中:

    config.assets.digest = true

    【讨论】:

    • config.assets.digest 设置为 true。当我说“备用资产目录”时,我指的是它被提供的前缀,而不是它在本地存储的目录。我正在使用 config.assets.prefix = '/z'
    【解决方案2】:

    尝试在投入生产之前预编译您的资产:

    bundle exec rake assets:precompile RAILS_ENV=production
    git commit -a -m "Precompile for release"
    git push
    git push heroku master
    

    这应该会为您解决问题。

    欲了解更多信息,请查看:https://devcenter.heroku.com/articles/rails-asset-pipeline

    更新

    这是另一篇可能有帮助的文章:

    https://medium.com/self-directed-learning/9ba1f595102a

    在 Heroku 中翻转此配置使我的一些资产管道问题消失了:

    heroku labs:enable user-env-compile -a yourapp
    

    【讨论】:

    • 资产已经预编译。它们是用文件名中的哈希编译的。问题是image_tag/asset_path 没有引用文件的散列版本。
    • 我没有使用 Heroku。
    【解决方案3】:

    确保 config.assets.css_compressor = :sass 在 production.rb 中启用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      • 2016-07-30
      • 2014-04-09
      • 2014-07-04
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      相关资源
      最近更新 更多