git 将 Rails 应用程序推送到 Heroku 时缺少“sqlite3.h”
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10455527/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
"sqlite3.h" missing when pushing Rails app to Heroku
提问by Amit Kumar Gupta
I'm following this tutorial, but it fails when I try to push to Heroku. It seems "sqlite3.h" is missing. I'm new to development so I'm not sure what information will help people diagnose the problem, so here's everything :). I'm running on Mac OS X 10.7 Lion. Here are the versions of everything I'm working with:
我正在关注本教程,但是当我尝试推送到 Heroku 时它失败了。似乎缺少“sqlite3.h”。我是开发新手,所以我不确定哪些信息可以帮助人们诊断问题,所以这就是一切:)。我在 Mac OS X 10.7 Lion 上运行。以下是我正在使用的所有版本:
Amits-MacBook-Air-2:demo_app amitgupta$ ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.3.0]
Amits-MacBook-Air-2:demo_app amitgupta$ rails -v
Rails 3.2.3
Amits-MacBook-Air-2:demo_app amitgupta$ sqlite3 -version
3.7.11 2012-03-20 11:35:50 00bb9c9ce4f465e6ac321ced2a9d0062dc364669
Amits-MacBook-Air-2:demo_app amitgupta$ heroku -v
2.25.0
Amits-MacBook-Air-2:demo_app amitgupta$ port -v
MacPorts 2.0.4
Entering interactive mode... ("help" for help, "quit" to quit)
[RailsApps/demo_app] > quit
Goodbye
When I try to push to Heroku:
当我尝试推送到 Heroku 时:
Amits-MacBook-Air-2:demo_app amitgupta$ heroku create --stack cedar
Creating floating-stream-8009... done, stack is cedar
http://floating-stream-8009.herokuapp.com/ | [email protected]:floating-stream-8009.git
Amits-MacBook-Air-2:demo_app amitgupta$ git push heroku master
Here's what I get:
这是我得到的:
Counting objects: 119, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (104/104), done.
Writing objects: 100% (119/119), 33.74 KiB, done.
Total 119 (delta 17), reused 0 (delta 0)
-----> Heroku receiving push
-----> Ruby/Rails app detected
-----> Installing dependencies using Bundler version 1.1.2
Running: bundle install --without development:test --path vendor/bundle --binstubs bin/ --deployment
Fetching gem metadata from https://rubygems.org/.......
Installing rake (0.9.2.2)
.
.
.
Installing sqlite3 (1.3.6) 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:
--with-opt-dir
.
.
.
--disable-local
Gem files will remain installed in /tmp/build_2l2dn7bx7lu34/vendor/bundle/ruby/1.9.1/gems/sqlite3-1.3.6 for inspection.
Results logged to /tmp/build_2l2dn7bx7lu34/vendor/bundle/ruby/1.9.1/gems/sqlite3-1.3.6/ext/sqlite3/gem_make.out
An error occured while installing sqlite3 (1.3.6), and Bundler cannot continue.
Make sure that `gem install sqlite3 -v '1.3.6'` succeeds before bundling.
!
! Failed to install gems via Bundler.
!
! Heroku push rejected, failed to compile Ruby/rails app
To [email protected]:blazing-mountain-3659.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to '[email protected]:blazing-mountain-3659.git'
When I do:
当我做:
Amits-MacBook-Air-2:demo_app amitgupta$ sudo port install sqlite3 +universal
I get:
我得到:
Password:
---> Computing dependencies for sqlite3
---> Cleaning sqlite3
Next I tried:
接下来我尝试:
Amits-MacBook-Air-2:demo_app amitgupta$ sudo gem install sqlite3 -v '1.3.6'
And get:
并得到:
Building native extensions. This could take a while...
Successfully installed sqlite3-1.3.6
1 gem installed
Installing ri documentation for sqlite3-1.3.6...
Installing RDoc documentation for sqlite3-1.3.6...
Then:
然后:
Amits-MacBook-Air-2:demo_app amitgupta$ bundle install
gives:
给出:
Using rake (0.9.2.2)
.
.
.
Using sqlite3 (1.3.6)
Using uglifier (1.2.4)
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
Then I try pushing to Heroku again, but get the same problem. Perhaps it has something to do with the discrepancy between the first command "Creating floating-stream-8009" and the second command "failed to push some refs to '[email protected]:blazing-mountain-3659.git'"?
然后我再次尝试推送到 Heroku,但遇到同样的问题。也许这与第一个命令“Creating floating-stream-8009”和第二个命令“未能将一些引用推送到'[email protected]:blazing-mountain-3659.git'”之间的差异有关?
回答by thisiswei
gem 'sqlite3', :group => [:development, :test]
group :production do
gem 'pg'
end
- edit
Gemfile
as above - remove
Gemfile.lock
- run
bundle install --without production
git add .
git commit -am "bundle updating sqlite3"
git push heroku master
- 编辑
Gemfile
如上 - 消除
Gemfile.lock
- 跑
bundle install --without production
git add .
git commit -am "bundle updating sqlite3"
git push heroku master
回答by DanS
Heroku uses postgresql so you want to remove sqlite3 or move it into a development group in your Gemfile.
Heroku 使用 postgresql,因此您想删除 sqlite3 或将其移动到 Gemfile 中的开发组中。
Check you Gemfile.lock for any other gems that may have dependencies on sqlite3, as this can also cause problems.
检查 Gemfile.lock 是否有可能依赖于 sqlite3 的任何其他 gem,因为这也会导致问题。
回答by Maged Makled
I had a similar problem and I wasn't even using sqlite3 for anything but after removing it from the gem file I still got that error
我有一个类似的问题,我什至没有使用 sqlite3 做任何事情,但是从 gem 文件中删除它后,我仍然遇到那个错误
what solved it for me was a commit command
为我解决的是一个提交命令
git commit -am
that I found on this tutorial
我在本教程中找到的
回答by sergserg
What happened to me was, I was following along the Heroku tutorial and when I used git push heroku master
it was pushing from my latest Git commit (obviously!)
发生在我身上的是,我一直在学习 Heroku 教程,当我使用git push heroku master
它时,它是从我最新的 Git 提交(显然!)
What I forgot was that in the eyes of Git, I was still using sqlite in the gemfile! Silly me!
忘记了,在Git眼里,我还是在gemfile中使用sqlite!傻我!
So I used git add .
followed by a git commit -m "Changed to Postgres."
so Git knew about these changes. Pushing after that worked fine for me.
所以我使用了git add .
后跟一个git commit -m "Changed to Postgres."
让 Git 知道这些变化。在这之后推动对我来说很好。