Can't push to heroku - sqlite3.h is missing

2019-04-06 16:55发布

问题:

first post here =) Thanks in advance for helping out, any help is cool at this point!

1- I've searched quite a lot and tried loads of stuff before considering posting on stackoverflow..

2- When running

   git push heroku master

I get this:

   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).

3- I checked the Gemfile: production and dev/test are well configured for pg and sqlite3 respectively

4- Sqlite3.h is here:

   pcbo$ ls -l /usr/include/sqlite3.h
   -rw-r--r--  1 root  wheel  322724  7 Dec  2011 /usr/include/sqlite3.h

5- Forgot to mention i'm using mac os x..

6- Output of: pcbo$ git push heroku master

    Counting objects: 71, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (58/58), done.
    Writing objects: 100% (71/71), 26.46 KiB, done.
    Total 71 (delta 8), reused 0 (delta 0)

    -----> Heroku receiving push
    -----> Ruby/Rails app detected
    -----> Installing dependencies using Bundler version 1.2.0.pre
    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 i18n (0.6.0)
   Installing multi_json (1.3.6)
   Installing activesupport (3.2.3)
   Installing builder (3.0.0)
   Installing activemodel (3.2.3)
   Installing erubis (2.7.0)
   Installing journey (1.0.3)
   Installing rack (1.4.1)
   Installing rack-cache (1.2)
   Installing rack-test (0.6.1)
   Installing hike (1.2.1)
   Installing tilt (1.3.3)
   Installing sprockets (2.1.3)
   Installing actionpack (3.2.3)
   Installing mime-types (1.18)
   Installing polyglot (0.3.3)
   Installing treetop (1.4.10)
   Installing mail (2.4.4)
   Installing actionmailer (3.2.3)
   Installing arel (3.0.2)
   Installing tzinfo (0.3.33)
   Installing activerecord (3.2.3)
   Installing activeresource (3.2.3)
   Installing coffee-script-source (1.3.3)
   Installing execjs (1.4.0)
   Installing coffee-script (2.2.0)
   Installing rack-ssl (1.3.2)
   Installing json (1.7.3) with native extensions
   Installing rdoc (3.12)
   Installing thor (0.14.6)
   Installing railties (3.2.3)
   Installing coffee-rails (3.2.2)
   Installing jquery-rails (2.0.2)
   Installing pg (0.12.2) with native extensions
   Using bundler (1.2.0.pre)
   Installing rails (3.2.3)
   Installing sass (3.1.19)
   Installing sass-rails (3.2.5)
   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
   --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_zmjrcoagwpai/vendor/bundle/ruby/1.9.1/gems/sqlite3-1.3.6 for inspection.
   Results logged to /tmp/build_zmjrcoagwpai/vendor/bundle/ruby/1.9.1/gems/sqlite3-1.3.6/ext/sqlite3/gem_make.out
   An error occurred 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

7- Any help is really appreciated !

回答1:

[Update1]

From your git push log, Here is your culprit:-

 Installing sqlite3 (1.3.6) with native extensions

So, As I initially suspected, blunder is trying to load sqlite3 gem which WILL fail on heroku. as said earlier this can happen because of two reasons

  1. Gemfile is wrongly configured to require sqlite3 gem in production
  2. Some other gem has dependency on sqlite3 gem. use the gem dependency command to show the dependencies of gem & remove that gem which depends on sqlite3.

After that, rerun bundle install & it would work.

---[End Update1]---

The only reason you can get this error is when, trying to use sqlite3 database on heroku which is not supported. so closely inspect your Gemfile and make sure its setup similar to this

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

And then do bundle install to regenerate your Gemfile.lock. now, try to push heroku. if you still get this error, then probably some gem that you are using has listed sqlite3 as hard-coded dependency in its gemspec file. so in effect, sqlite3 is being loaded even though its not present in gemfile. so verify this, run the following command on localhost:

$ bundle install | grep sqlite

Lastly, after trying this. it doesn't work. Post back the complete log of git push heroku master & output of heroku logs.



回答2:

Seems that the sqlite library is missing. Try and find it with

whereis sqlite3.h

If it is in your system, try:

sudo gem install sqlite3-ruby -- --with-sqlite3-include=<"url where it is(for eg: /usr/include)">

Regards