2016-09-21 42 views
5

我在Heroku上部署了一個新版本的Rails 5應用程序,運行在雪松-14堆棧上。它在部署時沒有預編譯,所以我手動執行了heroku run rake assets:precompile。不過,我可以看到它包含舊資產,同時需要cssjs文件。Heroku爲Rails 5應用程序提供舊資產

我的文件在app/assets,所以目錄不在資產編譯路徑中是不可能的。

我對application.rbproduction.rb配置:

config.assets.compile = true 

# I checked the environment variable, it responds to 'enabled', 
# which would return true for the option. 
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? 

# Which I changed to expire old assets. 
config.assets.version='1.1' 

我嘗試了這些,但他們沒有工作:

  • $ heroku restart
  • $ heroku run rake assets:precompile
  • $ heroku run rake assets:clobber

這些奇怪的事情是,他們不影響heroku服務器中的資產,我用$ heroku run ls public/assets進行了檢查。即使$ rake assets:precompile後,即使它這樣說:

WRITING /app/public/assets/application-{VERY_LONG_HASH}.js 
WRITING /app/public/assets/application-{VERY_LONG_HASH}.js.gz 
WRITING /app/public/assets/application-{VERY_LONG_HASH}.css 
WRITING /app/public/assets/application-{VERY_LONG_HASH}.css.gz 

,當我與$ heroku run ls public/assets偷看,我仍然看到舊資產呆在那裏。

編輯:我通過刪除public/assets所有本地資產,$ rake assets:clean && rake assets:precompile重新編譯他們,包括我git庫這些資產來解決它。這裏有一個問題:

Heroku不應該負責編譯我的資產嗎?我想我每次部署我的應用程序時都不應該編譯我的資產。謝謝。

+0

雖然您解決了這個問題,但我認爲問題在於您在應用程序的'heroku'實例內部執行所有操作,例如'assets:clobber'和'assets:precompile',而不是在您的本地實例中執行此操作並推送到heroku。關於你的問題,自從我開始使用heroku(即1年)以來,我也很想知道。 – Sajan

回答

0

您需要先提交您的更改。 然後在本地

RAILS_ENV=production bundle exec rake assets:precompile 

下一頁git add .

下一頁got commit -m"assets precompile"

下一頁git push origin yourBranchName

部署在Heroku上執行git push heroku yourbranch:master

+0

我已經有github與啓用自動部署集成。正如我所說,我很確定該應用程序已被部署。 – YigitOzkavci

+0

通過git狀態檢查我們的代碼的狀態,如果它顯示任何文件,那麼你需要添加並提交它們 –

+0

我想知道的是,我們是否需要包含我們的預編譯資產來提交?這不是暴露了編譯資產背後的原因嗎? 正如我所說,我相信問題不在於提交或推動。 – YigitOzkavci

1

運行和你做

+1

這是一個拙劣的解決方案....你不想將編譯後的資產添加到你的git倉庫。 – Daniel

相關問題