rails资产管道生产预编译

时间:2013-05-13 21:03:16

标签: ruby-on-rails asset-pipeline assets precompile

我有一个目录projName/vendor/assets/bootstrap/css/ 我正处于生产模式。 production.rb包含:config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/ 当我运行rake资产时:预编译 我明白了 projName/public/assets/css/但我想要projName/public/assets/bootstrap/css/ 我不明白为什么bootstrap目录不存在。 实际上,public assets/

中缺少供应商/资产和应用/资产下的所有顶级目录

3 个答案:

答案 0 :(得分:1)

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

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

当您运行(佣金任务)时

rake assets:precompile

它会在您的应用程序文件夹中创建一个public文件夹,该文件夹将编译您的所有资产清单(即您的application.cssapplication.js

这究竟是怎么发生的? - &GT; Rails捆绑了一个rake任务,它将编译所有这些。 rake任务如上所示。

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

用于编译文件的默认匹配器包括application.js,application.css和所有非JS / CSS文件(这将自动包括所有图像资源)来自app / assets文件夹,包括你的宝石。

这正是该正则表达式的含义(包括app / assets文件夹中的所有内容),您也可以明确地提供它,如上面的答案所示。

希望这会有所帮助。

以下是一些供您参考的链接

http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets

http://dennisreimann.de/blog/precompiling-rails-assets-for-development/

答案 1 :(得分:0)

该正则表达式意味着什么?如果你想预编译一切,试试这个。

config.assets.precompile = ['*.js', '*.css']

答案 2 :(得分: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

(基于code in the Rails Guide。)