2012-04-07 158 views
2

當我嘗試執行推送到heroku(git push heroku master)的git時,出現錯誤。我在雪松堆棧,我的Gemfile指定sqlite 1.3.5。這是錯誤:Heroku推送 - Git推送到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推拒絕,未能編譯Ruby/rails應用程序

+0

看看你的database.yml。可能是問題。 – 2012-04-07 03:28:13

回答

5

我遇到的一個問題導致了幾個小時的頭痛,是'水龍頭'的寶石。這是造成幾乎完全一樣的錯誤我,直到我把它變成了「發展」組:

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

不知道這是直接適用於你,但它產生的sqlite3的錯誤,直到我把水龍頭到:生產。希望它會幫助某人。

編輯:@cloneofsnake:我沒有足夠的代表評論你的答案,但我看到你的Gemfile中有'tap'gem。要麼擺脫它,要麼把它放在生產組裏;水龍頭顯然有一些依賴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。據我所知,group:production do是爲生產中使用的特定寶石,不用於測試。在這種情況下,你會安裝生產的特定版本的sqlite3嗎?或者你的意思是你會指定所有已安裝的寶石並將其放入生產組? – 2012-04-07 01:17:42

+0

對,你會得到一個sqlite錯誤,因爲Heroku使用PostgreSQL。你可以使用sqlite進行本地開發,當你推到Heroku時,你的遷移會自動映射到PostgreSQL。因此,將gem'pg'添加到生產中,將您的應用程序推到Heroku上,然後使用:「heroku run rake db:migrate」在Heroku上遷移。 – 2012-04-07 01:28:37

8

的Heroku是告訴你,你不能編譯的Heroku平臺上的sqlite3-ruby寶石。

您可能希望將sqlite3-ruby gem移動到Heroku中默認未安裝的組中。

gem "rails" 

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

group :production do 
    gem "pg" 
end 

更新:它出現在寶石sqlite3-ruby是老人和sqlite3是新的寶石,你應該使用。

+0

試過但它沒有工作:( – 2012-04-07 01:53:16

+0

這對我有用。你確定將Gemfile的更改推送到你的項目的git存儲庫 – kachilous 2012-04-10 22:08:14

+0

不要忘記提交任何更改,這聽起來很明顯,但我開始編輯和保存,我失去了兩個小時,直到我意識到我還沒有任何承諾!提交! – 2012-11-06 15:39:07

4

看看你試圖推動哪個分支。 在我來說,我工作的Dev分支,並試圖用推:

$ git push heroku master 

什麼混帳也正在推動我的主人分支Heroku的,但我的主分支使用sqlite3的,造成這個奇怪的錯誤。

嘗試做做:

$ git push heroku [name_of_your_branch]:master 
+0

謝謝!這對我有用 – 2012-10-26 17:46:41

+0

這也是一個很好的做法,以便在右手邊指定分支的名稱,結腸的一側。 – rodrigoalves 2013-02-09 19:54:39