0

我有一个奇怪的问题,只有我们的一些资产在生产中被预编译。我们的application.css文件已编译和更新,但mobile.css自 7 月以来我们的文件尚未编译,并且该站点仍指向此旧版本。

更奇怪的是,我们在暂存或本地环境中没有遇到这个问题。所有资产都经过预编译,并在网站上提供最新版本。

在 7 月,我们将站点升级到 rails 4 并将我们的配置更改为:

# Rails 4 changed the precompile to only for app/assets. This will include vendor/assets
config.assets.precompile << Proc.new{|filename, path| %w(.png .gif .css .js .htc .svg .eot .woff .ttf).include?(File.extname(filename)) && path =~ /(\/lib\/assets)|(\/vendor\/assets)/ }


config.assets.precompile += [
  'form.css',
  'homepage.css',

  …

  #mobile
  'common_mobile.css'
]

关于可能导致这种情况的任何想法?

4

1 回答 1

1

所以通常你需要的是 application.js 和 application.css 文件来引用所有的 css 和 js 文件来编译它们。任何你没有的东西,你需要在另一个清单文件中添加到预编译路径中。或者您手动添加到预编译路径。

因此,如果您有:

assets/
  stylesheets/
    application.css
    styles/
    mobile.css

Application.css 包含样式文件夹中的所有内容。你的预编译路径应该是这样的:

config.assets.precompile += %w(mobile.css)

现在您展示了扫描各种扩展。您可以真正将它们添加到数组中,您不需要获取完整的文件路径或任何花哨的东西。

config.assets.precompile += %w(mobile.css .css .eot .htc)

等等。

现在请记住,如果您使用的文件夹不是:assets/images、assets/stylesheets 或 assets/javascripts,请根据需要在 production.rb 中添加文件夹:

 config.assets.paths << Rails.root.join("app", "assets", "fonts")
 config.assets.paths << Rails.root.join("vendor", "assets", "audio")

然后预编译路径中的通配符将发挥作用。

要对此进行测试,只需在您的计算机上设置生产,然后运行 ​​rake 命令:

RAILS_ENV=production bundle exec rake assets:precompile

并在公共场合查看输出。我很确定该命令的环境默认为生产环境,但也可能是明确的。

于 2014-08-07T17:13:40.987 回答