ruby-on-rails - Rails Assets 路径在生产中缺少指纹

标签 ruby-on-rails asset-pipeline

我们刚刚将 Rails 4.0.3 应用程序部署到生产环境中,并发现由 stylesheet_link_tag 生成的 Assets 路径和 javascript_link_tag正在丢失他们的指纹。所以不要请求像 application-c841bd1c82c25bb1de8452d2338479f7.js 这样的东西, 页面只是请求 application.js .
RAILS_ENV=production bundle exec rake assets:precompile成功并生成指纹文件。

来自 config/environments/production.rb 的比特似乎相关的是:

# Compress JavaScripts and CSS
config.assets.compress = true

# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false

# Generate digests for assets URLs
config.assets.digest = true

# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false

这是在我们自己的 Apache 服务器上运行的,而不是 Heroku。我环顾四周并发现了类似的问题,但这些问题的故障排除步骤都没有帮助。谢谢。

更多信息

如果有帮助,以下是我们配置文件的完整内容(已删除注释行):
application.rb
require File.expand_path('../boot', __FILE__)

require 'rails/all'

if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end

module Ctrc
  class Application < Rails::Application
    config.ceal.application_title = "CTRC Budgeting"

    config.encoding = "utf-8"

    config.filter_parameters += [:password]

    config.active_support.escape_html_entities_in_json = true

    config.assets.enabled = true
    config.assets.version = '1.0'

    config.pmacs_redmine.project_identifier = 'itmat-gcrc'

    config.app_data_path = '/data/web/apps/itmat/ctrc'
    config.paperclip_defaults = {
      path: "/data/web/apps/itmat/ctrc/:attachment/:id/:style/:basename.:extension"
    }

    if ENV['RAILS_RELATIVE_URL_ROOT']
      config.assets.prefix = ENV['RAILS_RELATIVE_URL_ROOT'] + '/assets'
    end
  end
end
production.rb
Ctrc::Application.configure do
  config.cache_classes = true

  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true

  config.serve_static_assets = false
  config.assets.compress = true
  config.assets.compile = false
  config.assets.digest = true

  config.i18n.fallbacks = true

  config.active_support.deprecation = :notify

  config.eager_load = true

end

我知道应用程序正在生产模式下运行,因为如果我设置
config.assets.compile = true

在该文件中,CSS 和 JavaScript 被正确编译和请求。

我在页面中包含这些 Assets ,如下所示:
<%= stylesheet_link_tag    "application", media: "all" %>
<%= javascript_include_tag "application" %>

但它仍在生成指向这些 Assets 的链接,如下所示:
<link href="/apps/itmat/ctrc/stylesheets/application.css" media="all" rel="stylesheet">
<script src="/apps/itmat/ctrc/javascripts/application.js"></script>

而不是我希望看到的指纹链接。

最佳答案

我遇到了类似的问题,结果是 gem AssetSync 的问题。 .任一设置 config.assets.compile = true或删除 gem 解决了问题。如果您使用 CDN,动态编译 Assets 并让 Rails 为您的 Assets 提供服务可能是可以接受的,但通常建议采用另一种方法。

关于ruby-on-rails - Rails Assets 路径在生产中缺少指纹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24640362/

相关文章:

ruby-on-rails - rails + WebRTC 录音 + Carrierwave + 雾 + S3 + Ajax 错误

go - Heroku,golang Assets 编译应该在构建期间进行。但是怎么办?

ruby-on-rails-3 - 尝试在 AWS Elastic Beanstalk 上预编译 Assets

ruby-on-rails - 每当 gem 不会更新 crontab 任务时

ruby-on-rails - 如何从引擎加载 fixture ?

ruby-on-rails - 如何禁用 Active Storage 自动生成的路由

ruby-on-rails - 如何优化和组合这些低效的数据库查询?

ruby-on-rails - Sass::SyntaxError undefined variable

javascript - Rails 应用程序在加载整个页面时向客户端发送 JavaScript,但在单击 link_to root_path 时不发送 JavaScript?

ruby-on-rails-3 - 执行 Rails Assets :precompile? 时如何运行一些初始化程序