[英]Rails assets not precompiling in production
我正在使用Datetimepicker和Slider 。 我將它們包含在我的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再次開始工作。
有什么想法嗎?
這是因為與生產相比,事物在開發中的工作方式有所不同。 注意事項:
config.precompile
指令中列出,否則沒有任何CSS或JS文件可通過資產管道用於您的應用application.js
,默認情況下,所有CSS和JS文件僅application.css
和application.js
都可用。 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
要求它 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。 而且你不想生產緩慢
RAILS_ENV=production rake assets:clean assets:precompile
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.