2012-03-29 23 views
6

我在本地預編譯我的資產後,收到以下錯誤消息,然後按下代碼Heroku的部分修復:activeadmin Heroku的樣式表的配置問題與

2012-03-28T17:06:01+00:00 app[web.1]: Started GET "/admin/login" for 67.163.67.203 at 2012-03-28 17:06:01 +0000 

2012-03-28T17:06:01+00:00 app[web.1]: 

2012-03-28T17:06:01+00:00 app[web.1]: ActionView::Template::Error (File to import not found or unreadable: active_admin/mixins. 

2012-03-28T17:06:01+00:00 app[web.1]: Load paths: 
2012-03-28T17:06:01+00:00 app[web.1]: /app 
2012-03-28T17:06:01+00:00 app[web.1]: /app/vendor/bundle/ruby/1.9.1/gems/activeadmin-0.4.3/app/assets/stylesheets 
2012-03-28T17:06:01+00:00 app[web.1]: (in /app/vendor/assets/stylesheets/active_admin.css.scss)): 
2012-03-28T17:06:01+00:00 app[web.1]:  7: 
2012-03-28T17:06:01+00:00 app[web.1]:  6: <title><%= [@page_title, active_admin_application.site_title].compact.join(" | ") %></title> 
2012-03-28T17:06:01+00:00 app[web.1]:  8: <% ActiveAdmin.application.stylesheets.each do |style| %> 
2012-03-28T17:06:01+00:00 app[web.1]:  9:  <%= stylesheet_link_tag style.path, style.options %> 
2012-03-28T17:06:01+00:00 app[web.1]:  10: <% end %> 
2012-03-28T17:06:01+00:00 app[web.1]:  11: <% ActiveAdmin.application.javascripts.each do |path| %> 
2012-03-28T17:06:01+00:00 app[web.1]:  12:  <%= javascript_include_tag path %> 
2012-03-28T17:06:01+00:00 app[web.1]: vendor/assets/stylesheets/active_admin.css.scss:2 

...

我嘗試了一堆不同的選項,包括我在這裏找到的以下提示 - http://mrdanadams.com/2011/exclude-active-admin-js-css-rails/和其他GitHub頁面上的其他選項。

這些選項都不起作用。最終,我收到了一些建議,從git中刪除我的公共/資產目錄,將代碼推送到Heroku並讓Heroku預編譯資源。這種方法部分有效。當我嘗試訪問我的網站的/管理頁面時,我不再收到錯誤消息。但是,active_admin CSS文件丟失。它懷疑由於Heroku做了預編譯,即使active_admin.css文件沒有被預編譯,它也不會拋出錯誤。我怎樣才能得到active_admin.css預編譯?

順便說一句,我運行rails 3.2。

編輯:

看來我的「修復」不完整。如果我有require_tree。或require_directory。在我的application.css然後它工作,但它把我的主要應用程序CSS,因爲他們都被編譯爲application.css。如果我沒有其中一個條目,那麼它就會中斷。有關我如何解決這個問題的任何想法?

回答

11

你在正確的軌道上讓Heroku爲你編譯資產。這使事情變得最簡單。

要包含在預編譯器清單的其他文件,使用這樣的事情在你的應用程序配置(無論是config/application.rbconfig/environments/production.rb):

# Precompile additional assets. Defaults to [application.js, application.css, non-JS/CSS] 
config.assets.precompile += ['active_admin.css', 'active_admin/print.css', 'active_admin.js'] 
+0

謝謝。我嘗試了幾個直接設置config.assets.precompile的變體,包括:config.assets.precompile + = ['active_admin.css','active_admin.js']和config.assets.precompile + = [admin/active_admin。 CSS' ...]。但不幸的是,這似乎不能解決問題。 – rodleg 2012-03-31 20:25:14

+0

您能否澄清一些事情:您已從回購庫中刪除了「公共/資產」文件夾,對不對?當你嘗試這個時,你仍然看到的具體錯誤是什麼?直到我包含'print.css'文件後,我才能開始工作... – 2012-04-02 09:21:27

+0

是的。我從我的回購中刪除了公共/資產文件夾。以下是我收到的錯誤消息:
'已啓動GET「/ admin」對於 2012-04-02T14:57:02 + 00:00應用[web.2]:.... ActionView :: Template ::錯誤(文件導入未找到或無法讀取:active_admin/mixins。 2012-04-02T14:57:02 + 00:00 app [web.2]:'
有趣的是,我無法在任何地方找到active_admin/mixins。 – rodleg 2012-04-02 14:58:53

14

我終於能夠解決這個問題。如果有人遇到這個問題,我想我會記錄下我解決它的步驟。

我在生產模式(RAILS_ENV=production rails s)本地運行我的應用程序,並能夠複製我在本地計算機上在Heroku上收到的錯誤。

我將我的active_admin.css.scss和active_admin.js複製到/ vendor/assets目錄。由於y app不斷告訴我它缺少active_admin/mixins,我還將資產中的整個active_admin目錄複製到vendor/assets目錄。我不確定這是否有必要。

從Heroku的角度來看,我已經被告知但無法確認在預編譯期間沒有讀取production.rb,因此所有的設置都需要在application.rb中定義。所以,我確信,我曾在application.rb中進行以下設置 -

#Added to fix devise/active admin issue ? 
config.assets.initialize_on_precompile = false 

# Precompile additional assets. Defaults to [application.js, application.css, non-JS/CSS] 
config.assets.precompile += ['active_admin.css.scss', 'active_admin.js'] 

我發現最四處撒網上述提示的(#2,Heroku的,github上,等等)。

Bundler.require(*Rails.groups(:assets => %w(development test))) 

到:

Bundler.require(:default, :assets, Rails.env) 

一旦我做了這些變化,然後我可能會推動該代碼到,我沒有看到的是需要從做出改變Bundler.require在application.rb中的一部分Heroku,讓它爲我預編譯資產。我希望這可以幫助人們節省一些時間來解決這個問題。

+0

我仍然得到'active_admin.css沒有預編譯的這些指令... – 2012-07-09 03:18:56

+0

我不得不改變'active_admin.css.scss]'到'active_admin.css' – 2012-07-09 03:22:42

+0

在Openshift也可以使用應用程序。謝謝! – funnydaredevil 2014-07-27 15:30:18

5

有同樣的問題。

config.assets.precompile += %w(active_admin.css active_admin.js) 
+0

最簡單的解決方案! – microspino 2012-09-27 08:27:55

0

我發現我可以通過更新我的Gemfile解決此 - 移動「SASS-Rails的寶石出來的:通過添加以下到production.rb預編譯額外的資產固定資產組和進任生產或一般部分。

顯然,這是一個問題,Heroku的需要薩斯軌寶石或它打破東西,所以說:http://ygamretuta.me/2011/10/02/setting-up-active-admin-on-heroku-with-rails-3-1-and-cedar/

+0

儘管您在heroku上指出activeadmin存在一個問題,但這不是同一個問題。我首先遇到了資產組問題,但這個問題依然存在。 – pedalpete 2012-12-04 00:14:00

7

的ActiveAdmin GitHub的維基解決了這個問題具體是:​​

這裏就是它說的寫作時間:


  1. 嘗試添加AA資產預編譯列表application.rb

    # config/application.rb 
    config.assets.precompile += %w(active_admin.css active_admin.js active_admin/print.css) 
    
  2. 試着將active_admin.css.scssactive_admin.jsvendor/assets而不是app/assets注意你不能在production.rb添加它們,Heroku的不預編譯期間讀取production.rb!)。這可以防止在使用鏈輪指令時無意中包含AA資產require_tree .這是用於新的rails應用程序的application.css中的默認鏈輪指令,也是很多人對其網站所有部分都需要的AA資產感到困惑的原因。將AA資產置於vendor/assets可以防止此問題,但您也可以將其置於app/assets的子目錄中,並避免使用require_tree指令(改爲選擇require_directory)。

  3. 確保sass-rails在預編譯時可用。這需要確保在預編譯過程中需要資產組,或者在所有寶石組中都可以使用sass-rails。經常從舊版本的Rails升級不會有正確的Bundler require語句,所以這對於檢查您是否未在Rails 3.1+上啓動項目很重要。如果你可以在你的機器上運行bundle exec rake assets:precompile RAILS_ENV=production而沒有錯誤,並且配置了假生產數據庫,那麼你就很好。

  4. 設置特定的Heroku配置中的指示their FAQ有關使用資產管道部署:

    # config/application.rb - NOT production.rb 
    config.assets.initialize_on_precompile = false 
    
+0

完美答案!結構良好,消息靈通。現在我終於擁有了active_admin,twitter-bootstrap-rails,formtastic在開發和生產過程中都很好地結合在一起 - 這是最後一步。 – 2013-04-25 04:01:52

2

而不是保持文件的列表,我在production.rb改變標誌固定的問題:

config.assets.compile = true