2013-04-24 211 views
1

如何使Apache +乘客和導軌資產管道一起工作很好?資產管道導軌3.2不能在生產中工作

當我部署我在本地工作的項目,我得到一個500錯誤

In ActionView::Template::Error occurred in pages#start: jquery-ui-1.8.21.custom.min isn't precompiled 

如果我用grep my_project/current/assets_manifest.ymljquery-ui-1.8,它給了我

jquery-ui-1.8.21.custom.min.js: jquery-ui-1.8.21.custom.minc50ea0bef9c2fae04ab3b50ead60fc1f.js 

且該文件也存在於my_project/shared/assets(沿與jquery-ui-1.8.21.custom.min-c50ea0bef9c2fae04ab3b50ead60fc1f.js.gz,jquery-ui-1.8.21.custom.min.js,jquery-ui-1.8.21.custom.min.js.gz)。

當我在瀏覽器中打開 http://mytestserver/assets/jquery-ui-1.8.21.custom.min-c50ea0bef9c2fae04ab3b50ead60fc1f.js 它給了我正確的js文件。

500錯誤是由

app/views/layouts/application.haml:25 

行提出該文件的24-26是:

= javascript_include_tag "application" 
= javascript_include_tag "jquery-ui-1.8.21.custom.min" 
= csrf_meta_tag 

那麼什麼可以去錯了嗎?爲什麼它不起作用?

+0

如果您嘗試清除「assets」文件夾中的內容並再次運行rake資產:預編譯RAILS_ENV = production,那麼可以嗎? – MervS 2013-04-24 09:56:39

+0

我做了'my_project/current/public/assets $ rm * -r'和 'my_project/current $ bundle exec rake assets:precompile RAILS_ENV = production',它仍然是一樣的。 – 2013-04-24 10:06:21

回答

0

如果文件沒有被加載application.js,那麼你需要添加一行到application.rb因此應用程序知道它:

config.assets.precompile += ['jquery-ui-1.8.21.custom.min.js'] 
+0

在application.rb中有一個行'config.assets.precompile + =%w(* .js * .css)'..不應該這樣嗎? – 2013-04-24 09:23:36

+0

我從來沒有嘗試過將通配符傳遞給'config.assets.precompile',但是一個快速搜索表明其他人做這件事情的結果是不一樣的。可能值得傳遞實際的文件名只是爲了看看是否修復它。 – Simon 2013-04-24 10:35:52

+0

我停用了這一行..現在在rails生產環境中,我得到'1.8.7:003> config.assets.precompile 「/(?:\/|\\|\A)application\.(css|js) $ /,「gmaps4rails.css」,「jquery.fileupload-ui」,「jquery.tagsinput」,「jquery.Jcrop.min」,「jquery-ui-1.8.21.custom.min」,「gmaps4rails.css」 ,「jquery.fileupload-ui」,「jquery.tagsinput」,「jquery.Jcrop.min」'但我仍然得到'1.8.7:004> helper.javascript_include_tag「jquery-ui-1.8.21.custom.min」 Sprockets :: Helpers :: RailsHelper :: AssetPaths :: AssetNotPrecompiledError:jquery-ui-1.8.21.custom.min未預編譯「 – 2013-04-24 10:59:11

0

shared/assets不是資產管道通常查找文件的地方。

通常資產管道看起來在app/assets,它可能會在lib/assets看,我敢肯定它看起來也在vendor/assets也。但有可能vendor/assets默認不包含,我將在下面討論。

每Rails約定,我建議你把這種依賴性在vendor/assets/javascripts

如果你想搜索的目錄添加到資產的管道,它只是一個簡單的修改在YourProject::Application聲明config.application.rb

,添加:

config.assets.paths << Rails.root.join("vendor/assets/javascripts")

或其他任何你想要的路徑。

+0

在我的d他們在my_project/app/assets中的開發機器。我在談論服務器 - 因此也是capistrano在生產中引入的當前和共享文件夾 – 2013-04-24 13:37:57

0

我想我解決了這個問題。我覺得是這樣的步驟:

  • 重命名Capistrano的部署(命名空間和VAR損害的可能重複),這也是做了預編譯
  • 的耙命名空間將我通過javascript_include_tag包含的每個js文件添加到config.assets.precompile中,以便像@Simon這樣的生產環境建議
  • 在config.assets.precompile中它們似乎沒有提及.js-extension,而在javascript_include_tag指令中它們應該是包括在內。js-extension