2015-06-19 47 views
0

因此,我讀了類似問題的線程,但仍然困惑。這是我的寶石文件。試圖將Rails 4.2.1應用程序推向Heroku sqlite錯誤

我將gemfile中的所有sqlite3寶石更改爲gem'pg','0.7.0'我將database.yml文件中的所有sqlite3更改爲postgresql。我做了一個捆綁安裝,然後heroku創建,然後git推heroku主,這有多個問題,試圖安裝sqlite3。

+0

你能包括你的寶石文件嗎?一般來說,您不想爲不同的環境替換寶石,只需將它們捆綁在正確的組下。所以,舉個例子,你可以有一個開發組與sqlite和一個生產組,所有的pg都在同一個gemfile中。 –

+0

源 'https://rubygems.org' 寶石 '軌道', '4.2.2' 寶石 'SASS護欄', '5.0.2' 寶石 'uglifier', '2.5.3' 寶石'coffee-rails','4.1.0' gem'jquery-rails','4.0.3' gem'turbolinks','2.3.0' gem'jbuilder','2.2.3' gem'sdoc ','0.4.0',組::: doc group:development,:test do gem'pg','0.17.1' gem'byebug','3.4.0' gem'web-console' ,'2.0.0.beta3' 寶石'彈簧','1.1.3' 結束 組:生產do gem'pg','0.17.1' gem'rails_12factor','0.0.2' 結束 –

+0

對不起,請使用適當的格式更新您的操作系統。是的,在開發/測試和生產中使用sqlite是很常見的,但你不應該從你的gemfile中刪除sqlite來做到這一點 - 它應該在像group:development,test test這樣的組中使用。所以它被用於開發和測試。 –

回答

0

在開發和測試中運行SQLite以及像生產中的PostgreSQL這樣的其他數據庫是非常常見的。 Rails使得這很容易。

在您的Gemfile中,您可以使用組來指定應在每個環境中安裝哪些寶石。所以,在這種情況下,您的Gemfile將包含這樣的內容:

group :development, :test do 
    gem 'sqlite3',  '1.3.9' 
end 

group :production do 
    gem 'pg',    '0.17.1' 
end 

第一次加生產的寶石,你應該運行:

bundle install --without production 

更新您的gemfile.lock

同樣,在database.yml中,您應該爲開發和測試定義sqlite併爲生產定義postgresql。這裏有一個例子:

default: &default 
    adapter: sqlite3 
    pool: 5 
    timeout: 5000 

development: 
    <<: *default 
    database: db/development.sqlite3 

test: 
    <<: *default 
    database: db/test.sqlite3 

production: 
    database: signup 
    adapter: postgresql 
    pool: 5 
    timeout: 5000 
    username: xxxx 
    password: yyyy 

最後,請確保您提交到生產的Gemfile變化嘗試部署到的Heroku之前。

+0

謝謝史蒂夫,問題是我在部署到Heroku之前沒有做過提交。我獨自離開了gemfile和database.yml。再次感謝。 –

+0

很高興幫助約翰。 –