2010-10-09 15 views
37

Sto provando a distribuire la mia prima app su Heroku. Sto usando Sqlite come database. Per quanto ne so, Heroku non usa Sqlite - passa a Postgres nel backend.L'installazione dell'applicazione RoR su Heroku con Sqlite3 non riesce

quando sono la distribuzione ricevo il seguente errore:

/usr/ruby1.8.7/lib/ruby/gems/1.8/gems/bundler-1.0.0/lib/bundler/runtime.rb:64:in `require': no such file to load -- sqlite3 (LoadError)

mio Gemfile (che è quello che presumo sta causando questo problema) appare come segue:

source 'http://rubygems.org' 

gem 'rails', '3.0.0'   
gem 'sqlite3-ruby', '1.2.5', :require => 'sqlite3' 

Che cosa sto facendo sbagliato?

+0

E che dire di eseguirlo localmente? Ho sqlite in tutti i miei file gem e non ho problemi con heroku. Hai impacchettato? –

+0

Non credo di capire bene il concetto di raggruppamento. Cosa fa il bundling? (Un collegamento funzionerà) –

+0

Duplicato di [Spingere le rotaie con SQLite3 a Heroku non riuscito] (http: // StackOverflow.it/questions/3747002/push-rails-with-sqlite3-to-heroku-fail) –

risposta

53

Heroku non supporta i database SQLite. È necessario utilizzare PostgreSQL in produzione come I also explained in this post.

group :production do 
    gem "pg" 
end 

group :development, :test do 
    gem "sqlite3", "~> 1.3.0" 
end 

In realtà, si consiglia di utilizzare nello sviluppo/testare un ambiente il più vicino possibile alla produzione. Pertanto, ti suggerisco di passare tutti i tuoi ambienti a PostgreSQL.

# replace gem "sqlite3" with 
gem "pg" 
+0

Sei sicuro? Sto seguendo in RailsTutorial.org - l'autore distribuisce a Heroku senza cambiare nulla –

+0

Leggi qui http://docs.heroku.com/database –

+4

Grazie, non ho idea del perché lo stupido tutorial non menzioni che –

-4

Sto usando sqlite3 e distribuisco a Heroku senza problemi. Ecco il mio database.yml

# SQLite version 3.x 
# gem install sqlite3-ruby (not necessary on OS X Leopard) 
development: 
    adapter: sqlite3 
    database: db/development.sqlite3 
    pool: 5 
    timeout: 5000 

# Warning: The database defined as "test" will be erased and 
# re-generated from your development database when you run "rake". 
# Do not set this db to the same as development or production. 
test: 
    adapter: sqlite3 
    database: db/test.sqlite3 
    pool: 5 
    timeout: 5000 

production: 
    adapter: sqlite3 
    database: db/production.sqlite3 
    pool: 5 
    timeout: 5000 
+7

Il file database.yml non ha importanza: "Per facilitare la distribuzione delle tipiche applicazioni Rails, Heroku genera automaticamente un nuovo file database.yml sulla distribuzione" –

3

Simone Carletti è corretto e lo è anche Joost. Devi solo raggruppare la gemma sqlite3 o rimuoverla interamente dal tuo Gemfile. Heroku ha solo bisogno di sapere che non si desidera utilizzare per la produzione di sqlite3

Quindi questo:

... 
group :development, :test do 
    gem "sqlite3-ruby", "~> 1.3.0", :require => "sqlite3" 
end 
... 

O questo:

... 
#No reference to sqlite3-ruby 
... 

Se si rimuove il riferimento del tutto si avrà probabilmente pasticcio il tuo db locale però

0

Dopo sbattere la testa contro questo problema, mi sono reso conto che stavo spingendo i maestro ramo del mio repo a Heroku, mentre stavo facendo tutto delle mie modifiche postgres nel mio repository deploy-postgres del mio repo!

ho incorporato le mie deploy-postgres ramo con il mio maestro locale [git checkout master; git merge deploy-postgres] e quindi potevano correre git push heroku master come da documentazione di Heroku.