2014-01-20 38 views
1

由於我的生產機器有限(覆盆子pi),我想在我的生產機器中儘可能少地安裝寶石。爲了減少依賴關係,我想在我的開發機器上預編譯我的資源並將它們部署到生產環境中。所以我不需要在我的生產機器上進行預先編譯,也不需要資產管道所需的所有寶石。Rails資產:開發機器上的預編譯:如何處理資產組?

所以我感動的Gemfile中所有寶石的資產組,改變了我的config/application.rb中:

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

在開發和測試環境,一切工作正常。

但是,如果我想通過做預編譯我的dev的機器...

RAILS_ENV='production' bundle exec rake assets:precompile 

...它打破了由於從資產組的寶石丟失。

但我不能簡單地將資產組添加到生產環境中,因爲這需要將所有資產寶石安裝在我的生產環境中(我不想這麼做)。

有人有一個想法如何解決?

回答

1

您可以在dev m/c中編譯rake assets:precompile,然後將public/assets文件夾提交到遠程回購。因此,當生產服務器啓動時,它將從資產文件夾獲取已經預編譯的資產。確保您更改了js/css/image,相應地更新資產文件。

必須安裝Gemfile中提到的任何寶石。如果您覺得不需要使用特定的寶石,請將其從Gemfile中刪除。恩。 rubyracer gem存在於用於編譯js的Gemfile中。爲避免任何問題,如果編譯資產不存在,則應該回退,因爲由於缺少js編譯器,在運行時將不可能編譯

+0

因此,開發環境和生產環境中的預編譯沒有區別? – phortx

+1

如果您還沒有爲生產獨立指定任何特定圖像/ js。然後它是一樣的。它會以生產模式自動編譯/home/user/.rvm/rubies/ruby-1.9.3-p286/bin/ruby/home/user/.rvm/gems/ruby-1.9.3-p286/bin/rake assets:預編譯:所有RAILS_ENV =生產RAILS_GROUPS =資產 – Bijendra

+0

好的,那回答我的問題。謝謝 :) – phortx