2012-07-03 94 views
4

這裏的錯誤:Rails的資產不是在生產中編譯

Processing by LandingPageController#index as HTML 
    Rendered landing_page/index.html.erb within layouts/application (2.1ms) 
Completed 500 Internal Server Error in 49ms 

ActionView::Template::Error (landing_page.css isn't precompiled): 
    12:  <![endif]--> 
    13: 
    14:   <%= stylesheet_link_tag "application", :media => "all" %> 
    15:   <%= stylesheet_link_tag params[:controller] %> 
    16: 
    17: </head> 
    18: <body> 
    app/views/layouts/application.html.erb:15:in `_app_views_layouts_application_html_erb__3002306950342527375_29178380' 

我可以看到它尋找landing_page.css文件,因爲線15的什麼我不明白是什麼是什麼是最好的將此資產預編譯用於生產的方式。我曾嘗試修改/config/application.rb:

config.assets.precompile += ['landing_page.css'] 

這似乎對我不合適。我必須爲每個樣式表做這件事,這會讓人討厭。

我添加代碼到application.css清單:

*= require landing_page 

這似乎並沒有工作。當我這樣做,並且不修改應用程序配置文件時,我得到第一個錯誤。

我難倒你如何能在您的佈局的行

<%= stylesheet_link_tag params[:controller] %> 

,並有預編譯的生產資產,當你運行

bundle exec rake assets:precompile 

我覺得我錯過一些簡單的技巧,當您運行rake任務時,會自動將自動生成的樣式表和JavaScript文件添加到要編譯的文件列表中。

回答

3

添加require landing_page到application.css不會導致預編譯LANDING_PAGE。這意味着當application.css被預編譯時,landing_page.css的內容將被包含在輸出中。

如果你要單獨加載它們,即

<%= stylesheet_link_tag PARAMS [:控制器]%>

然後,你需要將它們都添加到的東西預編譯的列表。您可以在列表中使用通配符,因此,如果這些控制器的具體樣式表都在樣式表/控制器,那麼你可以做

config.assets.precompile + =「控制器/ *。CSS」]

雖然通常人們往往不這樣做。雖然爲了便於開發,事情往往是按照每個控制器分開的,然後所有這些都是從application.css中需要的。 Application.css然後是你調用的唯一樣式表stylesheet_link_tag

+0

這很有道理。謝謝! – mujtaba

+0

我認爲Frederick的迴應意味着任何'自定義'清單文件(使用js_include_tag params [:controller])都必須包含在config.assets.precompile中。這是Rails 4中的新功能嗎?那麼現在只有application.css,application.js是由Rails自動編譯的? –

+0

Rails 3.2對我來說一直如此 –

3

在/config/environments/production.rb補充一點:

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

我必須爲每個具有關聯樣式表的視圖執行此操作嗎?例如,如果我創建一個名爲pricing_page的視圖並且有一個名爲pricing_page.css.scss的自動生成的css文件,我是否需要再次將相同的代碼添加到production.rb文件中?我覺得我會有一堆這些行來指定所有的樣式表。我感覺不對:/ – mujtaba

+0

沒有不那樣,只是:'config.assets.precompile + =%w(landing_page.css next_file.css another_file.css)' –

0

這是我的新聞,所以我將分享:在Rails 4中,只有application.js | css清單文件文件由Rails自動編譯。如果你正在使用類似

javascript_include_tag controller_name 
# ex javascript_include_tag 'guitars' 

你顯然需要添加自定義清單(「吉他」)如上面提到的config.assets.precompile。我相信這是Rails 3.2的改變。