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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-19 06:53:04  来源:igfitidea点击:

"sqlite3.h" missing when pushing Rails app to Heroku

ruby-on-railsgitherokusqlitepush

提问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
  1. edit Gemfileas above
  2. remove Gemfile.lock
  3. run bundle install --without production
  4. git add .
  5. git commit -am "bundle updating sqlite3"
  6. git push heroku master
  1. 编辑Gemfile如上
  2. 消除 Gemfile.lock
  3. bundle install --without production
  4. git add .
  5. git commit -am "bundle updating sqlite3"
  6. 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 masterit 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 知道这些变化。在这之后推动对我来说很好。