Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails只在生产环境中预编译*部分*文件_Ruby On Rails_Ruby On Rails 4_Pre Compilation - Fatal编程技术网

Ruby on rails Rails只在生产环境中预编译*部分*文件

Ruby on rails Rails只在生产环境中预编译*部分*文件,ruby-on-rails,ruby-on-rails-4,pre-compilation,Ruby On Rails,Ruby On Rails 4,Pre Compilation,我有一个奇怪的问题,只有我们的一些资产在生产中被预编译。我们的application.css文件已经编译并更新,但是我们的mobile.css文件自7月份以来就没有编译过,网站仍然指向这个旧版本 更奇怪的是,我们在登台或本地环境中没有遇到这个问题。所有资产都是预编译的,最新版本在站点上提供 7月,我们将站点升级为rails 4,并将配置更改为: # Rails 4 changed the precompile to only for app/assets. This will include v

我有一个奇怪的问题,只有我们的一些资产在生产中被预编译。我们的
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'
]
#Rails 4将预编译更改为仅用于应用程序/资产。这将包括供应商/资产

config.assets.precompile因此,通常需要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/stylesheet或assets/javascripts,请根据需要在production.rb中添加这些文件夹:

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

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

谢谢,但问题似乎是由于链轮无法识别我需要重新编译资产而导致的。这些资产依赖于gem的样式表。gem被更新了,但是它没有触发重新编译,因为文件本身在技术上没有改变。我要开始调查一个新问题。在部署脚本中使用
rakeassets:clean
可能是值得的。我认为我们的工作通常都是这样,但我不确定。
RAILS_ENV=production bundle exec rake assets:precompile