Rails 预编译供应商/资产

Posted

技术标签:

【中文标题】Rails 预编译供应商/资产【英文标题】:Rails precompile vendor/asset 【发布时间】:2014-09-12 22:29:43 【问题描述】:

我正在尝试预编译供应商资产文件夹中的文件。

在生产中的 Rails 控制台中,我得到了这个:

puts Rails.application.config.assets.precompile
#<Proc:0x000000023b2110@/home/pills/.rvm/gems/ruby-2.1.0/gems/sprockets-rails-2.1.3/lib/sprockets/railtie.rb:40 (lambda)>
(?-mix:(?:\/|\\|\A)application\.(css|js)$)
(?-mix:.*.png)

puts Rails.application.config.assets.paths
/media/pills/be3eb155-9e10-4a71-9737-c82606a3dbd4/home/ububtu/code/ccr/app/assets/fonts
/media/pills/be3eb155-9e10-4a71-9737-c82606a3dbd4/home/ububtu/code/ccr/app/assets/images
/media/pills/be3eb155-9e10-4a71-9737-c82606a3dbd4/home/ububtu/code/ccr/app/assets/javascripts
/media/pills/be3eb155-9e10-4a71-9737-c82606a3dbd4/home/ububtu/code/ccr/app/assets/stylesheets
/media/pills/be3eb155-9e10-4a71-9737-c82606a3dbd4/home/ububtu/code/ccr/vendor/assets/chosen
/media/pills/be3eb155-9e10-4a71-9737-c82606a3dbd4/home/ububtu/code/ccr/vendor/assets/javascripts
/media/pills/be3eb155-9e10-4a71-9737-c82606a3dbd4/home/ububtu/code/ccr/vendor/assets/stylesheets
/home/pills/.rvm/gems/ruby-2.1.0/gems/turbolinks-2.2.2/lib/assets/javascripts
/home/pills/.rvm/gems/ruby-2.1.0/gems/jquery-rails-3.1.0/vendor/assets/javascripts
/home/pills/.rvm/gems/ruby-2.1.0/gems/coffee-rails-4.0.1/lib/assets/javascripts

预编译的最后一部分是通过以下方式在生产中获得的:

config.assets.precompile += [/.*.png/]

为什么所选文件夹中的 png 文件没有被预编译?

如果我将 png 复制到 app/assets/images 中,它可以工作,我现在会以这种方式解决问题。

【问题讨论】:

【参考方案1】:

试试这个:

config.assets.precompile << /\.(?:png)\z/

我不知道这里的功能在哪里,但是当我将我的代码从喜欢你的版本更改为这个时,它突然开始按预期工作。我只能建议,这是因为您将未转义的点字符放在正则表达式中并且它无法匹配文件名。

【讨论】:

以上是关于Rails 预编译供应商/资产的主要内容,如果未能解决你的问题,请参考以下文章

预编译 Rails AngularJS 资产

预编译资产失败的 Rails

Rails:预编译资产缺少节点模块

RAILS 轨道资产:预编译失败

未使用 Rails 测试环境中的预编译资产

Rails 3.1 资产预编译 - 包括所有 javascript 文件