2012-04-07 4 views
2

У меня ошибка, когда я пытаюсь сделать git push для heroku (git push heroku master). Я на стек кедра, и мой Gemfile указывает sqlite 1.3.5. Вот ошибка:Heroku Push - ошибка с Git Push to Heroku

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: 
    --with-opt-dir 
    --without-opt-dir 
    --with-opt-include 
    --without-opt-include=${opt-dir}/include 
    --with-opt-lib 
    --without-opt-lib=${opt-dir}/lib 
    --with-make-prog 
    --without-make-prog 
    --srcdir=. 
    --curdir 
    --ruby=/usr/local/bin/ruby 
    --with-sqlite3-dir 
    --without-sqlite3-dir 
    --with-sqlite3-include 
    --without-sqlite3-include=${sqlite3-dir}/include 
    --with-sqlite3-lib 
    --without-sqlite3-lib=${sqlite3-dir}/lib 
    --enable-local 
    --disable-local 
    Gem files will remain installed in /tmp/build_3umr292rjcdek/vendor/bundle/ruby/1.9.1/gems/sqlite3-1.3.5 for inspection. 
    Results logged to /tmp/build_3umr292rjcdek/vendor/bundle/ruby/1.9.1/gems/sqlite3-1.3.5/ext/sqlite3/gem_make.out 
    An error occured while installing sqlite3 (1.3.5), and Bundler cannot continue. 
    Make sure that `gem install sqlite3 -v '1.3.5'` succeeds before bundling. 

! ! Не удалось установить драгоценные камни через Bundler. ! ! Heroku push отклонено, не удалось скомпилировать приложение Ruby/rails

+0

Посмотрите на свой database.yml. Возможно, проблема. –

ответ

5

Одна проблема, с которой я столкнулся с часами головных болей, был с драгоценными камнями «краны». Это вызывало в значительной степени ту же самую ошибку, для меня, пока я не переместил его в группу «развития»:

group :production do 
    gem 'taps' 
    gem 'pg' 
end 

Не уверен, если это непосредственно относится к вам, но он произвел sqlite3 ошибки, пока я не поставил краны в: производство. Надеюсь, это поможет кому-то.

EDIT: @cloneofsnake: У меня недостаточно комментариев, чтобы прокомментировать ваш ответ, но я вижу, что у вас есть драгоценный камень «кранов» в вашем Gemfile. Либо избавитесь от него, либо поместите его в: производственную группу; краны имеют некоторые зависимости от sqlite3. Я уже отключил sqlite3 для pg, но я получал ту же ошибку, что и вы, пока я не переместил «краны» на производство.

0

Убедитесь, что у вас есть необходимые драгоценные камни на производстве. У меня недавно была эта проблема. Также попробуйте использовать gem 'pg' (POSTGRESQL) вместо sqlite, как это использует Heroku.

например:

group :production do 
    gem 'pg' 
    gem 'carrierwave' 
    gem 'rmagick' 
    gem 'heroku' 
    gem 'git-rails' 
    gem "jquery-rails" 
    gem 'hoe', '~> 1.5.1' 
    gem "RedCloth" 
    gem 'i18n' 
end 
+0

Вышеприведенная ошибка, похоже, о sqlite3. Насколько я понимаю, группа: производство делает, чтобы включить конкретные драгоценные камни для производства, которые не используются в тесте. В этом случае вы бы установили конкретную версию sqlite3 для производства? Или вы имеете в виду, что будете указывать все установленные драгоценные камни и помещать их в производственную группу? –

+0

Правильно, вы получаете ошибку sqlite, потому что Heroku использует PostgreSQL. Вы можете разрабатывать локально с помощью sqlite, и когда вы нажимаете на Heroku, ваши миграции автоматически преобразуются в PostgreSQL. Поэтому добавьте gem 'pg' в производство, нажмите свое приложение на Heroku, а затем используйте: «heroku run rake db: migrate», чтобы перейти на Heroku. –

8

Heroku говорит вам, что вы не можете скомпилировать sqlite3-ruby камень на платформе Heroku.

Возможно, вы захотите перенести жемчужину sqlite3-ruby в группу, которая по умолчанию не установлена ​​на Heroku.

gem "rails" 

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

group :production do 
    gem "pg" 
end 

Update: Оказывается, камень sqlite3-ruby стар и sqlite3 это новый драгоценный камень, вы должны использовать вместо этого.

+0

Пробовал это, но это не сработало :( –

+0

Это сработало для меня. Не забудьте ли вы внести изменения в Gemfile в репозиторий git для своего проекта? – kachilous

+0

И не забывайте совершать какие-либо изменения. Это звучит совершенно очевидно, но я начал редактировать и сэкономить, и я потерял два часа, пока не понял, что ничего не совершил! Commit! –

4

Посмотрите, какую ветку вы пытаетесь нажать. В моем случае я работал на Dev отрасли, и пытаются толкнуть с помощью:

$ git push heroku master 

Что мерзавец действительно толкает мой главный филиал в Heroku, но мой мастер филиал использует sqlite3, вызывая эту странную ошибку.

Try делать делать:

$ git push heroku [name_of_your_branch]:master 
+0

спасибо, это сработало для меня –

+0

Также неплохо, что для aways указывается название ветки в правой руке, стороне толстой кишки. – rodrigoalves