Rails只在生产环境中预编译*一些*文件



我有一个奇怪的问题,只有一些我们的资产在生产中被预编译。我们的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'
]

你知道是什么原因导致的吗?

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

所以如果你有:

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

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

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

并在公共场合查看输出。我很确定该命令的环境默认为生产环境,但最好是显式的。

相关内容

  • 没有找到相关文章

最新更新