2012-09-20 69 views
0

我一直在遇到一個問題,推送代碼到Heroku,並有階段改變,打破我的應用程序。它在本地工作,但當我推到Heroku時,我注意到應用程序切換到生產階段並中斷。是否可以在不改變階段的情況下將Rails應用程序部署到Heroku?

有沒有什麼辦法只使用一個階段,即在我的生產階段發展到本地?我不需要版本歷史。或者,我可以簡單地將我的開發階段推向Heroku嗎?

本地,我運行的是OSX 10.8.1,Ruby 1.9.3p194和Rails 3.2.8。

該應用程序是基於我一直在學習和拼湊事物的最小的博客。它利用SQLite進行存儲。

回答

0

沒有看到爲什麼你的應用程序在推向Heroku時突然崩潰,我猜這是一對夫婦的問題之一。

  • 首先,你必須使用的Postgres您的數據庫,即:gem 'pg'Gemfile至少在:production組。

  • 其次,資產必須進行預編譯或配置設置必須改變,以允許資產不初始化應用程序編譯:

    rake assets:precompile

    添加config.assets.initialize_on_precompile = falseconfig/environments/production.rb文件。

我通常使用rake assets:precompile然後添加資產,我的git倉庫,雖然許多人會認爲(我會同意),添加這些文件到您的回購通常不是最好的想法。

+0

太棒了,我會給它一個答案並回復。 – Xspence

+0

呵呵。我可以使用MySQL,或者在這種情況下使用Postgres會更好嗎? - 速度明智。 – Xspence

+1

如果你想嘗試一下,有幾個MySQL附加組件:https://addons.heroku.com/。不要讓任何人欺負你相信MySQL或Postgres更快。他們都很好。把它作爲一個偏好問題。 –

3

僅使用一個環境是一個壞主意。不要這樣做。

您的本地/開發和生產環境可能有差異,這就是您使用2個不同環境的原因,因此您可以在配置文件中捕獲這些環境。許多緩存,編譯資產和調試只發生在dev或prod中,並且您希望它們的行爲有所不同。

相反,您需要調試prod和dev(heroku和local)中不同的內容,並更改您的應用以解決這些差異。

例如,Heroku不支持sqlite - 它默認使用postgres。

所以你需要在開發的Gemfile中使用sqlite,爲了生產,或者(我強烈建議)在開發中使用postgres以及(https://devcenter.heroku.com/articles/怎麼辦,我使用-sqlite3的促進發展)。

如果你選擇繼續與開發源碼,你的Gemfile看起來應該是這樣:

group :development do 
    gem 'sqlite3' 
end 

group :production do 
    gem 'pg' 
end 
0

如果你想給生產模式在本地機器上一試,啓動服務器,像這樣:

rails server -e production 

希望這會讓你在推向Heroku之前抓住一些陷阱。

安德魯的答案是關鍵。爲了您的方便,緩存等開發模式。生產模式的運行效率更高,但是將會是一個巨大的開發難題。 (例如,您將不斷需要重新加載緩存並重新編譯資源。)您不希望在生產環境中運行開發模式,因爲您的應用程序運行速度非常緩慢。

希望能夠讓您瞭解在一個環境中運行另一個環境的權衡。取捨的因素主要是發展方便性與性能方面的問題。

+0

啊。這實際上很有意義。謝謝! – Xspence

相關問題