1

I am trying to deploy a rails app that I created using SQLite3. But after running git push heroku master I keep getting the following error

Initializing repository, done.
Counting objects: 164, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (147/147), done.
Writing objects: 100% (164/164), 78.88 KiB | 0 bytes/s, done.
Total 164 (delta 33), reused 0 (delta 0)

-----> Ruby app detected
-----> Compiling Ruby/Rails
-----> Using Ruby version: ruby-2.0.0
-----> Installing dependencies using 1.6.3
       Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
       Fetching gem metadata from https://rubygems.org/.........
       Fetching additional metadata from https://rubygems.org/..
       Installing rake 10.3.2
       Installing i18n 0.6.9
       Installing minitest 5.3.5
       Installing thread_safe 0.3.4
       Installing builder 3.2.2
       Installing erubis 2.7.0
       Installing rack 1.5.2
       Installing mime-types 1.25.1
       Installing polyglot 0.3.5
       Installing json 1.8.1
       Installing arel 5.0.1.20140414130214
       Installing coffee-script-source 1.7.0
       Installing execjs 2.2.0
       Installing thor 0.19.1
       Using bundler 1.6.3
       Installing hike 1.2.3
       Installing multi_json 1.10.1
       Installing sass 3.2.19
       Installing tilt 1.4.1
       Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
       /tmp/build_c9d45d78-4c2b-4825-9bd8-b3961ccc175f/vendor/ruby-2.0.0/bin/ruby extconf.rb
       checking for sqlite3.h... no
       sqlite3.h is missing. Try 'port install sqlite3 +universal',
       'yum install sqlite-devel' or 'apt-get install libsqlite3-dev'
       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=/tmp/build_c9d45d78-4c2b-4825-9bd8-b3961ccc175f/vendor/ruby-2.0.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_c9d45d78-4c2b-4825-9bd8-b3961ccc175f/vendor/bundle/ruby/2.0.0/gems/sqlite3-1.3.9 for inspection.
       Results logged to /tmp/build_c9d45d78-4c2b-4825-9bd8-b3961ccc175f/vendor/bundle/ruby/2.0.0/gems/sqlite3-1.3.9/ext/sqlite3/gem_make.out
       Installing rack-test 0.6.2
       Installing tzinfo 1.2.1
       An error occurred while installing sqlite3 (1.3.9), and Bundler cannot continue.
       Make sure that `gem install sqlite3 -v '1.3.9'` succeeds before bundling.
       Bundler Output: Fetching gem metadata from https://rubygems.org/.........
       Fetching additional metadata from https://rubygems.org/..
       Installing rake 10.3.2
       Installing i18n 0.6.9
       Installing minitest 5.3.5
       Installing thread_safe 0.3.4
       Installing builder 3.2.2
       Installing erubis 2.7.0
       Installing rack 1.5.2
       Installing mime-types 1.25.1
       Installing polyglot 0.3.5
       Installing json 1.8.1
       Installing arel 5.0.1.20140414130214
       Installing coffee-script-source 1.7.0
       Installing execjs 2.2.0
       Installing thor 0.19.1
       Using bundler 1.6.3
       Installing hike 1.2.3
       Installing multi_json 1.10.1
       Installing sass 3.2.19
       Installing tilt 1.4.1

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

       /tmp/build_c9d45d78-4c2b-4825-9bd8-b3961ccc175f/vendor/ruby-2.0.0/bin/ruby extconf.rb
       checking for sqlite3.h... no
       sqlite3.h is missing. Try 'port install sqlite3 +universal',
       'yum install sqlite-devel' or 'apt-get install libsqlite3-dev'
       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=/tmp/build_c9d45d78-4c2b-4825-9bd8-b3961ccc175f/vendor/ruby-2.0.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_c9d45d78-4c2b-4825-9bd8-b3961ccc175f/vendor/bundle/ruby/2.0.0/gems/sqlite3-1.3.9 for inspection.
       Results logged to /tmp/build_c9d45d78-4c2b-4825-9bd8-b3961ccc175f/vendor/bundle/ruby/2.0.0/gems/sqlite3-1.3.9/ext/sqlite3/gem_make.out
       Installing rack-test 0.6.2
       Installing tzinfo 1.2.1
       An error occurred while installing sqlite3 (1.3.9), and Bundler cannot continue.
       Make sure that `gem install sqlite3 -v '1.3.9'` succeeds before bundling.
 !
 !     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 [email protected]:rocky-dusk-1857.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to '[email protected]:rocky-dusk-1857.git'

This is my gemfile:

source 'https://rubygems.org'


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.1.1'
# Use sqlite3 as the database for Active Record
group :development do
  gem 'sqlite3', '1.3.8'
  gem 'spring'
end
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.3'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer',  platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0',          group: :doc

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

I deployed all the applications that appeared on the "Rails tutorial" by Michael Hartl with no problem but now I am developing my own apps with slightly newer version of rails and ruby and I am having trouble with this. Any help will be greatly appreciate it.

2 Answers 2

2

Data

Heroku doesn't support SQLite3 as it stores data on the hard drive (which will get overwritten on a new push).

A persistent data store (database) is required, and Heroku recommend Postgres.

--

Error

I think your error will have several potential causes:

  1. You've not updated your Gemfile.lock file
  2. You've not committed your Gemfile properly before committing to Heroku
  3. One of your gems depends on sqlite3 (unlikely)

I would resolve the issue like this:

#Gemfile
group :development do
   #gem 'sqlite' -> comment out for now
end

group :production do
   gem 'pg'
end

Then I would make sure I've committed all the changes:

$ git add .
$ git commit -a -m "Heroku"
$ git push heroku master

This will allow you to push a bona-fide version of your Gemfile to Heroku, consequently allowing you to test the deployment properly

If you need any further assistance, please comment & I'll help!

Sign up to request clarification or add additional context in comments.

4 Comments

Thank you for your help! I tried it but I still keep getting the same error. I also ran bundle after commenting out the sqlite gem and checked the resulting gemfile.lock to make sure that there were no gems that depended on it.
And still the same problem?
Yes. I decided to set pg also for development (entirely getting rid of sqlite3) as suggested on the link you posted. My project works fine locally using postgres now, but I still keep having the same error when trying to deploy. I wonder if this has something to do with it "Gem files will remain installed in /tmp/build_c9d45d78-4c2b-4825-9bd8-b3961ccc175f/vendor/bundle/ruby/2.0.0/gems/sqlite3-1.3.9 for inspection." I do not understand how come it keeps saying Detected sqlite3 gem
Silly me!! I was trying to push the master branch while making changes to a branch... I already merged the branch to master and pushed it again and everything went smoothly. Thanks for you help. Anyways it was a good exercise to learn how to switch from one database to another.
-1

In order to deploy on Heroku while using the SQL lite gem for development you must:
bundle install --without production

3 Comments

Heroku doesn't support SQLite as it relies on storing the data on disk, rather than in a DB
@RichPeck You're certainly right about SQLite support on Heroku, but the words here make my head hurt. All modern databases I'm aware of store data in files. (In the dark ages some avoided the OS file system for performance reasons.) SQLite is not supported by Heroku because it's serverless. It doesn't run a separate process. Heroku Dynos don't have their own persistent store, so they need to communicate with a separate database process that does.
lol yes that's true - I meant storing it on a server as opposed to storing locally

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.