2012-10-26 6 views
14

Właśnie rozpocząłem książkę ruby.railstutorial.org autorstwa Michaela Hartla i pracowałem nad pierwszym rozdziałem. Używam Mac OS X, Terminal i Sublime Text. Wszystko poszło zgodnie z planem, dopóki nie nadszedł czas na przetestowanie wdrożenia na Heroku. Mogę połączyć się z Heroku i uruchomić polecenie główne $ git push heroku. Ale rozmieszczenie nie powiedzie:Wdrożenie Heroku nie powiodło się z powodu błędu gem sqlite3

Installing sqlite3 (1.3.5) with native extensions 
     Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. 
     /usr/local/bin/ruby extconf.rb 
     checking for sqlite3.h... no 
     sqlite3.h is missing. Try 'port install sqlite3 +universal' 
     or 'yum install sqlite-devel' and check your shared library search path (the 
     location where your sqlite3 shared library is located). 
     *** extconf.rb failed *** 
     Could not create Makefile due to some reason, probably lack of 
     necessary libraries and/or headers. Check the mkmf.log file for more 
     details. You may need configuration options. 
     Provided configuration options: 


An error occurred while installing sqlite3 (1.3.5), and Bundler cannot continue. 
     Make sure that `gem install sqlite3 -v '1.3.5'` succeeds before bundling. 
! 
!  Failed to install gems via Bundler. 
!  
!  Detected sqlite3 gem which is not supported on Heroku. 
!  http://devcenter.heroku.com/articles/how-do-i-use-sqlite3-for-development 
! 
!  Heroku push rejected, failed to compile Ruby/rails app 

Oto moja Gemfile

source 'https://rubygems.org' 

     gem 'rails', '3.2.8' 

     # Bundle edge Rails instead: 
     # gem 'rails', :git => 'git://github.com/rails/rails.git' 

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


     # Gems used only for assets and not required 
     # in production environments by default. 
     group :assets do 
     gem 'sass-rails', '~> 3.2.5' 
     gem 'coffee-rails', '~> 3.2.2' 

     # See https://github.com/sstephenson/execjs#readme for more supported runtimes 
     # gem 'therubyracer', :platforms => :ruby 

     gem 'uglifier', '>= 1.2.3' 
     end 

     gem 'jquery-rails', '2.0.2' 

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

     # To use ActiveModel has_secure_password 
     # gem 'bcrypt-ruby', '~> 3.0.0' 

     # To use Jbuilder templates for JSON 
     # gem 'jbuilder' 

     # Use unicorn as the app server 
     # gem 'unicorn' 

     # Deploy with Capistrano 
     # gem 'capistrano' 

     # To use debugger 
     # gem 'debugger' 

mam sqlite3 przeznaczone na rozwój, a nie produkcji, więc pomyślałem Heroku po prostu zignorować to wszystko razem, ale to nie wydaje się być w tym przypadku.

Ponadto, gdy tworzę wiązkę Używam $ pakiet zainstalować --without produkcja

Wiem, że niektórzy ludzie sugerują, po prostu zainstalować i używać PG, ale naprawdę chcę, aby trzymać się z samouczka w miarę możliwości, zanim wyruszę i spróbuję innego podejścia.

Jestem trochę zagubiony w tej chwili i nie wiem, jak przejść dalej. Każda pomoc, którą możesz zapewnić, będzie najbardziej doceniona.

Dzięki

+0

Wow, że pomoc ogniwo jest dużo bardziej pomocne niż kiedy uderzy ten problem ... – Chowlett

+1

Śledź porady tego linku i użyć zamiast PostgreSQL. – sevenseacat

+1

Sprawdź tę sekcję https://devcenter.heroku.com/articles/building-a-rails-3-application-with-memcache-addon#create-your-application – fankt

Odpowiedz

21

Heroku nie można zainstalować gem sqlite3, niezależnie od przyczyny. Ale możesz powiedzieć bundler, że nie powinno to próbować, z wyjątkiem sytuacji, gdy się rozwija.

w twojej Gemfile wymienić gem 'sqlite3' z:

group :development, :test do 
    gem 'sqlite3' 
end 
group :production do 
    gem 'pg' 
end 

Następnie Bundler na Heroku, działa jako production, nie będzie starał się go zainstalować.

+3

Zaktualizowałem Gemfile za pomocą kodu, i dołączone i wdrożone w Heroku, ale wciąż otrzymuję ten sam błąd. – xuamox

+0

instalacja gemowa sqlite3 zakończyła się sukcesem, podobnie jak pakiet bez produkcji, i wciąż nie ma szczęścia – xuamox

+0

Głupio mi, zapomniałem dodać klejnotu 'pg' jako zamiennik. A teraz? – Chowlett

1

Na Heroku Twoja aplikacja nie ma dostępu do systemu plików. Istnieje wiele przyczyn tego stanu rzeczy - wynika to głównie z faktu, że możesz skalować wydajność aplikacji, dodając nowe instancje (np. Uruchamiając wiele serwerów jednocześnie), a te instancje nie są gwarantowane na tej samej maszynie fizycznej - kopiowanie pliki w poprzek będą bardzo powolne.

SQLite po prostu przechowuje bazę danych do pliku w twoim folderze db /, dlatego jest niekompatybilny z Heroku.

Najlepszym rozwiązaniem, jak zasugerowano w linku pomocy, jest odejście od SQLite, bo bywają subtelne niezgodności między SQLite oraz PostgreSQL (baza Heroku z wyboru) i chcesz się tego dowiedzieć przed wdrożyć do produkcji!

Po zainstalowaniu PostgreSQL (dokładnie jak to zrobić, zależy od systemu operacyjnego), a następnie dodać gem 'pg' do Gemfile.

13

W końcu udało mi się skutecznie wdrożyć w Heroku. Dzięki evanc3 za wskazanie mi artykułu na stronie Heroku. Wygląda na to, że po prostu zapomniałem zatwierdzić moje aktualizacje Gemgile przed wdrożeniem do Heroku. Tak więc dla wszystkich rozpoczynających się, musisz upewnić się, że zatwierdziłeś zmiany przed wdrożeniem do Heroku.

+0

Dzięki! Pomagałeś mi również. – YoTengoUnLCD

+0

Oto "Dzięki!" "Ja też!" skomentuj, aby ten pomocny wpis został zablokowany! – gangelo

8

Heroku nie obsługują sqlite3 ...

Usuń sqlite3 z Gemfile, zamiast użycia pg gem.Wykonaj następujące zmiany w pliku gem

zmiany następujące w swojej Gemfile

gem 'sqlite3' 

do

gem 'pg' #you will have to install postgresql 

Ważne: Uruchom

git add . 
git commit 
git push heroku master 

Uwaga: Jeśli planujesz wdrożyć do Heroku , Sugeruję, że lepiej jest użyć PostgreSQL również w fazie rozwoju (install postgresql na twoim komputerze), heroku woli psql.

Jeśli chcesz używać sqllite do programowania i postgresql dla Heroku, użyj poniższej konfiguracji.

group :development do 
    gem 'sqlite3' #gem to use in development environment 
end 

group :production do 
    gem 'pg'   #gem to use in production environment 
end 

Heroku użyje pg gem od Heroku uruchomić aplikację w środowisku produkcyjnym

+0

Git dodaj i popełnij część naprawdę mi pomogła! Dzięki. Dodałem wszystkie części, ale ich nie popełniłem. –

0

Mam rozwiązanie, jeśli nie masz sqlite3 bezpośrednio w gemfile a ty wciąż otrzymuję ten błąd.

Najprawdopodobniej posiadasz klejnot, który używa sqlite3 jako zależności i zawiera klejnot bez twojej wiedzy.

1) Idź do Gemfile.lock i zrób poszukiwanie sqlite.

2) Znajdź, który klejnot używa sqlite, a następnie przenieś klejnot do grupy projektowej lub testowej.

3) Bundle