0

我有一个目录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/

4

3 回答 3

1

编译后的资产被写入 中指定的位置config.assets.prefix。默认情况下,这是public/assets目录。

要理解这一点,您必须首先了解预编译是什么以及做什么。让我解释

当你运行时(一个 rake 任务)

rake assets:precompile

它将public在您的应用程序文件夹中创建一个文件夹,该文件夹将编译您的所有资产清单(即您的application.cssapplication.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/

于 2014-03-11T09:56:32.957 回答
0

实际上,如果您想预编译所有内容,请尝试以下操作:

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 指南中的代码。)

于 2014-09-10T13:38:05.980 回答
0

那个正则表达式是什么意思?如果你想预编译所有东西,试试这个。

config.assets.precompile = ['*.js', '*.css']
于 2013-07-27T04:39:27.827 回答