簡體   English   中英

Rails資產未在生產中進行預編譯

[英]Rails assets not precompiling in production

我正在使用DatetimepickerSlider 我將它們包含在我的Gemfile中

gem 'datetimepicker-rails', github: 'zpaulovics/datetimepicker-rails', branch: 'master', submodules: true
source 'https://rails-assets.org' do
  # gem 'rails-assets-select2-bootstrap-css'
  gem 'rails-assets-seiyria-bootstrap-slider'
end

在我的application.js

//= require moment
//= require bootstrap-datetimepicker
//= require pickers

//= require seiyria-bootstrap-slider

這在開發中效果很好,但是當我在服務器上運行RAILS_ENV=production rake assets:precompile時(通過Capistrano部署或手動進行RAILS_ENV=production rake assets:precompile ),這些東西似乎並沒有被引入。Chrome首先抱怨這兩個問題。

我知道我可以把Rails.application.config.assets.precompile += %w( *.js ) ,然后執行=javascript_include_tag :XXXX ,但這Rails.application.config.assets.precompile += %w( *.js )了鏈輪/清單的目的嗎?

我對鏈輪/清單的理解是,當我在application.js需要它時,它將包含在部署中,因此客戶端對服務器的命中率降低了。

有什么我想念的嗎?

編輯跟蹤問題到uglifier gem。 當我刪除/注釋掉config.assets.js_compressor = :uglifier並重新編譯時,JS再次開始工作。

有什么想法嗎?

這是因為與生產相比,事物在開發中的工作方式有所不同。 注意事項:

  1. 除非它們包含在其他文件中config.precompile指令中列出,否則沒有任何CSS或JS文件可通過資產管道用於您的應用application.js ,默認情況下,所有CSS和JS文件僅application.cssapplication.js都可用。
  2. 在編譯public/assets時, Rails會將每個不是Javascript文件或CSS文件的文件都復制到public/assets文件夾中。因此,如果要添加一些Web字體,可以制作一個app / assets / fonts /文件夾,然后在其中放置字體,然后在編譯資產時將它們復制到public/assets/fonts文件夾。 請注意,引用這些字體的app/assets/stylesheets/fonts.css.scss文件不會被復制,除非您將其添加到config.assets.precompile指令中或從application.css要求它
  3. for config.assets.compile ...如果將其設置為“ true”(在開發中是默認設置),那么Rails將嘗試通過首先查看public/assets目錄來查找Javascript或CSS文件,如果可以找不到它,將在您的app/assets文件夾中搜尋該文件。 如果它在app/assets找到它,它將繼續進行並進行即時編譯,然后將其投入使用。

問題是您不會注意到它在開發中發生,然后您提交所有內容並將其推送到生產和BOOM,因為生產config.assets.compile設置為“ false”,所以一切都被500錯誤破壞了。應用程序從“后退”並嘗試直接加載文件,而不是使用資產管道。

# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false

為什么不在每個環境中都將其設置為“ true”? 好吧,因為它是sloooooow。 而且你不想生產緩慢

  1. 運行RAILS_ENV=production rake assets:clean assets:precompile
  2. 檢查public / assets目錄並驗證資產是否已編譯。.如果資產不為空...表示資產管道正在運行,但路徑不正確。請使用asset_helpers設置css文件中資產的路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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