2012-10-26 4 views
14

Ich habe gerade das Buch ruby.railstutorial.org von Michael Hartl begonnen und habe das erste Kapitel durchgearbeitet. Ich benutze Mac Buch OS X, Terminal und Sublime Text. Alles lief nach Plan, bis es Zeit war, den Einsatz bei Heroku zu testen. Ich kann eine Verbindung zu Heroku herstellen und den Master-Befehl $ git push heroku ausführen. Aber die Bereitstellung fehlschlägt:Heroku-Bereitstellung fehlgeschlagen wegen sqlite3 gem Fehler

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 

Hier mein Gemfile ist

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' 

Ich habe bezeichnet für die Entwicklung Sqlite3 und nicht die Produktion, so dass ich dachte, Heroku wäre es einfach ignorieren alle zusammen, aber das scheint nicht zu der Fall sein.

Auch wenn ich schaffe das Bündel i $ Bundle mit bin installieren --ohne Produktion

Ich weiß, dass einige Leute nur PG vorgeschlagen zu installieren und zu verwenden, aber ich möchte wirklich das Tutorial bleiben so viel wie möglich, bevor ich herauskomme und einen anderen Ansatz versuche.

Ich bin im Moment ein bisschen verloren, und bin mir nicht sicher, wie ich von hier fortfahren soll. Jede mögliche Hilfe, die Sie zur Verfügung stellen können, würde am meisten geschätzt.

Dank

+0

Wow, der Hilfe-Link ist viel mehr nicht hilfreich, als wenn ich dieses Problem getroffen ... – Chowlett

+1

den Rat des Link folgen und PostgreSQL stattdessen verwenden. – sevenseacat

+1

Überprüfen Sie diesen Abschnitt https://devcenter.heroku.com/articles/building-rails-3-application-with-the-memcache-addon#create-your-application – fankt

Antwort

21

Heroku die sqlite3 Juwel nicht installieren können, egal aus welchem ​​Grund. Aber Sie können bundler sagen, dass es nicht versuchen sollte, außer beim Entwickeln auszukommen.

In Ihrem Gemfile ersetzen gem 'sqlite3' mit:

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

Bündler Dann auf Heroku, wie production ausgeführt wird, versuchen nicht, es zu installieren.

+3

Ich habe Gemfile mit Code aktualisiert und zu Heroku gebündelt und bereitgestellt, aber ich bekomme immer noch den gleichen Fehler. – xuamox

+0

Gem Installation von sqlite3 war erfolgreich, wie das Bündel ohne Produktion war, und immer noch kein Glück – xuamox

+0

Silly mich, ich habe vergessen, die 'pg' Juwel als Ersatz hinzuzufügen. Wie wäre es jetzt? – Chowlett

1

Auf Heroku hat Ihre App keinen Zugriff auf das Dateisystem. Dafür gibt es eine Reihe von Gründen. Dies liegt im Wesentlichen daran, dass Sie die Leistung Ihrer App durch Hinzufügen neuer Instanzen (dh mehrere Server gleichzeitig) skalieren können. Diese Instanzen befinden sich nicht garantiert auf demselben physischen Computer - Kopieren Die Dateien würden sehr langsam sein.

SQLite speichert die Datenbank nur in einer Datei in Ihrem db/Ordner, weshalb sie nicht mit Heroku kompatibel ist.

Die beste Option, wie sie in der Hilfe-Link vorgeschlagen, ist weg von SQLite zu bewegen, weil es manchmal subtile Inkompatibilitäten zwischen SQLite und PostgreSQL (Heroku Datenbank der Wahl) sind und Sie wollen, dass diese Sie vor, um herauszufinden, bereitstellen zur Produktion!

Nachdem Sie PostgreSQL installiert haben (genau wie dies zu tun ist, hängt von Ihrem Betriebssystem ab) und fügen Sie gem 'pg' zu Ihrem Gemfile hinzu.

13

Ich konnte endlich erfolgreich auf Heroku bereitstellen. Danke an evanc3, dass sie mich auf einen Artikel auf der Heroku Seite aufmerksam gemacht hat. Es scheint, dass ich vergessen habe, meine Gemgile-Updates vor der Bereitstellung auf Heroku zu committen. Wenn Sie also erst angefangen haben, müssen Sie sicherstellen, dass Sie Ihre Änderungen vor der Bereitstellung bei Heroku festgeschrieben haben.

+0

Danke! Du hast mir auch geholfen. – YoTengoUnLCD

+0

Hier ist ein "Danke!" "Ich auch!" kommentieren, damit dieser hilfreiche Beitrag gesperrt wird! – gangelo

8

Heroku nicht unterstützen sqlite3 ...

Entfernen sqlite3 von Ihrem Gemfile statt Verwendung pg gem.Haben folgende Änderung in gem Datei

folgende Änderung in Ihrem Gemfile

gem 'sqlite3' 

zu

gem 'pg' #you will have to install postgresql 

Wichtig:

git add . 
git commit 
git push heroku master 

Hinweis Run: Wenn Sie Heroku bereitstellen möchten , Ich schlage vor, es ist besser, postgres in Ihrer Entwicklungsphase auch zu benutzen (installieren Sie postgresql in Ihrem Computer), Heroku bevorzugen psql.

Wenn Sie sqlite für die Entwicklung und postgresql für Heroku verwenden möchten, verwenden Sie die folgende Konfiguration.

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 wird pg gem verwenden, da Heroku Ihre Anwendung in der Produktion Umwelt laufen

+0

Der Git Add und Commit Teil hat wirklich den Trick für mich gemacht! Vielen Dank. Ich hatte alle Teile hinzugefügt, aber nicht begangen. –

0

Ich habe eine Lösung für, wenn Sie sqlite3 haben nicht direkt in Ihrem gemfile und Sie immer noch diesen Fehler.

Höchstwahrscheinlich haben Sie ein Juwel, das sqlite3 als Abhängigkeit verwendet, und es enthält den Edelstein, ohne dass Sie es wissen.

1) Gehe zu Gemfile.lock und suche nach sqlite.

2) Suchen Sie nach dem Edelstein, der sqlite verwendet, und verschieben Sie den Edelstein in die Entwicklungs- oder Testgruppe.

3) Bundle