我有一个奇怪的问题,我们资产的部分正在生产中进行预编译。我们的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'
]
关于可能导致这种情况的任何想法?
答案 0 :(得分:1)
通常你需要的是application.js&amp; application.css文件引用所有的css&amp; 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)
等等。
现在请记住,如果您使用以下文件夹:资产/图像,资产/样式表或资产/ 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
看看公开的输出。我非常确定环境默认为该命令的生产,但也可能是明确的。