Heroku: Push rejected, failed to compile Ruby app

2019-03-06 02:27发布

问题:

I have been stuck for a week trying to figure this out. I have currently been following online lectures, however I followed everything exactly, and the instructor isn't really of any help. Whenever I try to push to heroku I receive the following:

Initializing repository, done. Counting objects: 85, done. Delta compression using up to 2 threads. Compressing objects: 100% (76/76), done. Writing objects: 100% (85/85), 27.36 KiB, done. Total 85 (delta 6), reused 0 (delta 0)

-----> Ruby app detected
-----> Compiling Ruby/Rails
-----> Using Ruby version: ruby-2.0.0
-----> Warning:
       Removing `Gemfile.lock` because it was generated on Windows.
       Bundler will do a full resolve so native gems are handled properly.
       This may result in unexpected gem versions being used in your app.
       In rare occasions Bundler may not be able to resolve your dependencies
 all.
       https://devcenter.heroku.com/articles/bundler-windows-gemfile
-----> Installing dependencies using Bundler version 1.5.2
       New app detected loading default bundler cache
       Running: bundle install --without development:test --path vendor/bundl
-binstubs vendor/bundle/bin -j4
       Your Gemfile lists the gem sqlite3 (>= 0) more than once.
       You should probably keep only one of them.
       While it's not a problem now, it could cause errors if you change the
sion of just one of them later.
       Your Gemfile lists the gem sqlite3 (>= 0) more than once.
       You should probably keep only one of them.
       While it's not a problem now, it could cause errors if you change the
sion of just one of them later.
       Your Gemfile lists the gem rspec-rails (= 2.6.1) more than once.
       You should probably keep only one of them.
       While it's not a problem now, it could cause errors if you change the
sion of just one of them later.
       Fetching gem metadata from https://rubygems.org/.........
       Fetching additional metadata from https://rubygems.org/..
       Resolving dependencies...
       Using builder (3.0.4)
       Using erubis (2.7.0)
       Using journey (1.0.4)
       Using rack (1.4.5)
       Using hike (1.2.3)
       Using tilt (1.4.1)
       Installing i18n (0.6.1)
       Using polyglot (0.3.3)
       Installing mime-types (1.25.1)
       Using tzinfo (0.3.38)
       Using bundler (1.5.2)
       Using coffee-script-source (1.6.3)
       Using execjs (2.0.2)
       Using json (1.8.1)
       Using thor (0.18.1)
       Installing multi_json (1.8.4)
       Installing rake (10.1.1)
       Installing arel (3.0.3)
       Using rack-cache (1.2)
       Using rack-test (0.6.2)
       Using rack-ssl (1.3.3)
       Using treetop (1.4.15)
       Using coffee-script (2.2.0)
       Using rdoc (3.12.2)
       Installing sass (3.2.13)
       Installing uglifier (2.4.0)
       Using sprockets (2.2.2)
       Using mail (2.5.4)
       Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native
tension.
       /tmp/build_903734dc-f591-44eb-8891-428ba3caf9e0/vendor/ruby-2.0.0/bin/
y 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 pat
the
       location where your sqlite3 shared library is located).
       *** extconf.rb failed ***
       Could not create Makefile due to some reason, probably lack of necessa
       libraries and/or headers.  Check the mkmf.log file for more details.
 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=/tmp/build_903734dc-f591-44eb-8891-428ba3caf9e0/vendor/ruby-2.0
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}/
       --enable-local
       --disable-local
       Gem files will remain installed in /tmp/build_903734dc-f591-44eb-8891-
ba3caf9e0/vendor/bundle/ruby/2.0.0/gems/sqlite3-1.3.8 for inspection.
       Results logged to /tmp/build_903734dc-f591-44eb-8891-428ba3caf9e0/vend
bundle/ruby/2.0.0/gems/sqlite3-1.3.8/ext/sqlite3/gem_make.out
       Installing activesupport (3.2.13)
       Installing pg (0.17.1)
       An error occurred while installing sqlite3 (1.3.8), and Bundler cannot
ntinue.
       Make sure that `gem install sqlite3 -v '1.3.8'` succeeds before bundli

       Bundler Output: Your Gemfile lists the gem sqlite3 (>= 0) more than on

       You should probably keep only one of them.
       While it's not a problem now, it could cause errors if you change the
sion of just one of them later.
       Your Gemfile lists the gem sqlite3 (>= 0) more than once.
       You should probably keep only one of them.
       While it's not a problem now, it could cause errors if you change the
sion of just one of them later.
       Your Gemfile lists the gem rspec-rails (= 2.6.1) more than once.
       You should probably keep only one of them.
       While it's not a problem now, it could cause errors if you change the
sion of just one of them later.
       Fetching gem metadata from https://rubygems.org/.........
       Fetching additional metadata from https://rubygems.org/..
       Resolving dependencies...
       Using builder (3.0.4)
       Using erubis (2.7.0)
       Using journey (1.0.4)
       Using rack (1.4.5)
       Using hike (1.2.3)
       Using tilt (1.4.1)
       Installing i18n (0.6.1)
       Using polyglot (0.3.3)
       Installing mime-types (1.25.1)
       Using tzinfo (0.3.38)
       Using bundler (1.5.2)
       Using coffee-script-source (1.6.3)
       Using execjs (2.0.2)
       Using json (1.8.1)
       Using thor (0.18.1)
       Installing multi_json (1.8.4)
       Installing rake (10.1.1)
       Installing arel (3.0.3)
       Using rack-cache (1.2)
       Using rack-test (0.6.2)
       Using rack-ssl (1.3.3)
       Using treetop (1.4.15)
       Using coffee-script (2.2.0)
       Using rdoc (3.12.2)
       Installing sass (3.2.13)
       Installing uglifier (2.4.0)
       Using sprockets (2.2.2)
       Using mail (2.5.4)

       Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native
tension.

       /tmp/build_903734dc-f591-44eb-8891-428ba3caf9e0/vendor/ruby-2.0.0/bin/
y 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 pat
the
       location where your sqlite3 shared library is located).
       *** extconf.rb failed ***
       Could not create Makefile due to some reason, probably lack of necessa
       libraries and/or headers.  Check the mkmf.log file for more details.
 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=/tmp/build_903734dc-f591-44eb-8891-428ba3caf9e0/vendor/ruby-2.0
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}/
       --enable-local
       --disable-local


       Gem files will remain installed in /tmp/build_903734dc-f591-44eb-8891-
ba3caf9e0/vendor/bundle/ruby/2.0.0/gems/sqlite3-1.3.8 for inspection.
       Results logged to /tmp/build_903734dc-f591-44eb-8891-428ba3caf9e0/vend
bundle/ruby/2.0.0/gems/sqlite3-1.3.8/ext/sqlite3/gem_make.out
       Installing activesupport (3.2.13)
       Installing pg (0.17.1)
       An error occurred while installing sqlite3 (1.3.8), and Bundler cannot
ntinue.
       Make sure that `gem install sqlite3 -v '1.3.8'` succeeds before bundli

 !
 !     Failed to install gems via Bundler.
 !
 !     Detected sqlite3 gem which is not supported on Heroku.
 !     https://devcenter.heroku.com/articles/sqlite3
 !

 !     Push rejected, failed to compile Ruby app

To git@heroku.com:tranquil-ridge-7489.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:tranquil-ridge-7489.git'

I have tried rebuilding the gem files, deleting gemfile.lock and running bundle installer, following solution from previous questions, but I am still getting this error.

Here is my current gemFile:

source 'https://rubygems.org'

gem 'rails', '3.2.13'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'sqlite3'


# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platforms => :ruby

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# To use Jbuilder templates for JSON
# gem 'jbuilder'

# Use unicorn as the app server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'debugger'

group :development do
    gem 'sqlite3'
    gem 'rspec-rails', '2.6.1', :require => 'rspec-rails'
    gem 'faker', '0.3.1'
end

group :test do
    gem 'sqlite3'
    gem 'rspec-rails', '2.6.1', :require => 'rpec-rails'
    gem 'webrat', '0.7.1'
    gem 'factory_girl_rails', '1.0'
    gem 'turn', :require => false
end

group :production do
    gem 'pg'
end

Any help on this?

回答1:

I would recommend a few things:

1) Follow the instructions here to deal with the Gemfile issues that arise when deploying a Ruby project generated on Windows.

2) Do the following in your Gemfile

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

group :development do
  gem 'sqlite3'
end

This gets rid of sqlite3 from your production deployment. Use it for unit and integration testing, but use PostgreSQL for acceptance/functional testing because that's the RDBMS of choice on Heroku. Also, reference your gems only once each.

3) Set up the Hobby Dev version of the PostgreSQL add-on in your deployment environment on Heroku.



回答2:

You can't use SQLite on Heroku, you'll have to use PostgreSQL.

You can set it up to use PostgreSQL on Heroku but SQLite in development, it's a good practice to use the same database in both your development and production environments.

Notice that you list the gem 'sqlite3' multiple times, including one outside the development group. This causes Heroku to try to install it.

My suggestion is to remove the sqlite gem completely and switch all to PostgreSQL.



回答3:

remove the top gem sqlite3 and add ruby '2.0.0' at the top of your gemfile

also under the group production add gem 'rails_12factor'