[英]Rails 3.1 Asset pipeline - Why my images do not precompile for production?
[英]rails asset pipeline production precompile
我有一个目录projName/vendor/assets/bootstrap/css/
我处于生产模式。 production.rb包含:config.assets.precompile << /(^[^_\\/]|\\/[^_])[^\\/]*$/
当我运行rake资产时:precompile我得到projName/public/assets/css/
但我想要projName/public/assets/bootstrap/css/
我不明白为什么引导目录不存在。 实际上, public assets/
中缺少供应商/资产和应用/资产下的所有顶级目录。
编译后的资产将写入config.assets.prefix
指定的位置。 默认情况下,这是public/assets
目录。
要了解这一点,您必须首先了解什么是预编译和做什么。 让我解释
运行时(耙任务)
rake assets:precompile
它会创建一个public
应用程序文件夹内的文件夹,这将编译你的所有资产清单(即你的application.css
和application.js
)
这到底是怎么发生的? -> Rails捆绑了一个rake任务,它将编译所有这些。 上面显示的是该耙任务。
编译后的资产将写入config.assets.prefix
指定的位置。 默认情况下,这是public/assets
目录。
用于编译文件的默认匹配器包括application / assets文件夹(包括您的gems)中的application.js,application.css和所有非JS / CSS文件(这将自动包括所有图像资产)。
这正是regex的含义(将所有内容包括在app / assets文件夹中),您也可以显式提供它,如上面的答案所示。
希望这会有所帮助。
这里有一些链接供您参考
http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets
http://dennisreimann.de/blog/precompiling-rails-assets-for-development/
正则表达式是什么意思? 如果要预编译所有内容,请尝试此操作。
config.assets.precompile = ['*.js', '*.css']
实际上,如果您想预编译所有内容,请尝试以下操作:
def precompile?(path)
%w(app lib vendor).each do |asset_root|
assets_path = Rails.root.join(asset_root, 'assets').to_path
return true if path.starts_with?(assets_path)
end
false
end
# Precompile all assets under app/assets (unless they start with _)
Rails.application.config.assets.precompile << proc do |name, path|
starts_with_underscore = name.split('/').last.starts_with?('_')
unless starts_with_underscore
path = Rails.application.assets.resolve(name).to_path unless path # Rails 4 passes path; Rails 3 doesn't
precompile?(path)
end
end
(基于Rails Guide中的代码 。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.