簡體   English   中英

Rails資產管道生產預編譯

[英]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.cssapplication.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM