2010-10-09 8 views
37

Próbuję wdrożyć moją pierwszą aplikację na Heroku. Używam Sqlite jako bazy danych. O ile wiem, Heroku nie używa Sqlite - przełącza się na PostgreSQL w backend.Rozmieszczanie aplikacji RoR do Heroku z Sqlite3 kończy się niepowodzeniem

Kiedy jestem rozmieszczanie pojawia się następujący błąd:

/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)

Moje gemfile (co jest co zakładam jest przyczyną tego problemu) wygląda następująco:

source 'http://rubygems.org' 

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

Co robię źle?

+0

A co z uruchamianiem go lokalnie? Mam sqlite we wszystkich moich plikach gem i nie mam problemów z heroku. Pakowałeś? –

+0

Nie sądzę, że rozumiem pojęcie sprzedaży pakietowej. Co robi pakowanie? (Link zrobi) –

+0

Duplikat [Pushing Rails z SQLite3 na Heroku kończy się niepowodzeniem] (http: // stackoverflow.com/questions/3747002/pushing-rails-with-sqlite3-to-heroku-fails) –

Odpowiedz

53

Heroku nie obsługuje baz danych SQLite. Musisz użyć PostgreSQL przy produkcji, jako I also explained in this post.

group :production do 
    gem "pg" 
end 

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

Właściwie zaleca się stosowanie w fazie projektowania/testowania środowiska jak najbliżej produkcji. Dlatego sugeruję przełączenie wszystkich środowisk na PostgreSQL.

+0

Jesteś pewien? Śledzę w RailsTutorial.org - autor wdraża Heroku bez zmiany czegokolwiek. –

+0

Przeczytaj tutaj http://docs.heroku.com/database –

+4

Dzięki, nie mam pojęcia, dlaczego ten głupi tutorial nie wspomina o tym, że –

-4

Używam sqlite3 i wdrażam w Heroku bez problemu. Oto moja baza.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

Plik database.yml nie ma znaczenia - "Aby ułatwić wdrożenie typowych aplikacji Railsowych, Heroku automatycznie generuje nowy plik database.yml podczas wdrażania" –

3

Simone Carletti ma rację, tak samo jak Joost. Wystarczy zgrupować klejnotu sqlite3 lub całkowicie go usunąć z pliku Gemfile. Heroku po prostu musi wiedzieć, że nie chcesz używać sqlite3 do produkcji

Więc tak:

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

Albo to:

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

Jeśli usunąć odwołanie w całości prawdopodobnie będzie bałagan do lokalnej bazy danych, ale

0

Po walić głową o tym problemie, zdałem sobie sprawę, popychając głównego oddział moim repo do Heroku, gdy robiłem wszystko moich zmian postgres w mojej gałęzi deploy-postgres mojego repo!

I połączył moje Wdrażanie-postgres oddział z mojego lokalnego mistrza [git checkout master; git merge deploy-postgres], a następnie może uruchomić git push heroku master jak na dokumentacji Heroku.