我有一个目录projName/vendor/assets/bootstrap/css/
,我处于生产模式。production.rb 包含: config.assets.precompile<< /(^[^_\/]|\/[^_])[^\/]*$/
当我运行 rake assets:precompile 我得到
projName/public/assets/css/
但我想projName/public/assets/bootstrap/css/
我不明白为什么引导目录不存在。实际上 vendor/assets 和 app/assets 下的所有顶级目录都在public assets/
3 回答
编译后的资产被写入 中指定的位置config.assets.prefix
。默认情况下,这是public/assets
目录。
要理解这一点,您必须首先了解预编译是什么以及做什么。让我解释
当你运行时(一个 rake 任务)
rake assets:precompile
它将public
在您的应用程序文件夹中创建一个文件夹,该文件夹将编译您的所有资产清单(即您的application.css
和application.js
)
这究竟是怎么发生的?-> Rails 捆绑了一个 rake 任务,它将编译所有这些。该 rake 任务如上所示。
编译后的资产被写入 中指定的位置config.assets.prefix
。默认情况下,这是public/assets
目录。
编译文件的默认匹配器包括 app/assets 文件夹中的 application.js、application.css 和所有非 JS/CSS 文件(这将自动包括所有图像资产),包括您的 gem。
这正是该正则表达式的含义(将所有内容包含在您的 app/assets 文件夹中),您也可以明确地提供它,如上面的答案所示。
希望这有帮助。
这里有几个链接供您参考
http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets
http://dennisreimann.de/blog/precompiling-rails-assets-for-development/
实际上,如果您想预编译所有内容,请尝试以下操作:
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 指南中的代码。)
那个正则表达式是什么意思?如果你想预编译所有东西,试试这个。
config.assets.precompile = ['*.js', '*.css']