Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deploy a simple test app with Sinatra + DataMapper + Postgres + Heroku returns: Installing do_sqlite3 (0.10.7) error

Goal: Deploy a simple test app with Sinatra + DataMapper + Postgres + Heroku

Issue: When using gem 'dm-postgres-adapter' gem 'dm-sqlite-adapter' to push the app to Heroku I get this. Installing do_sqlite3 (0.10.7) with native extensions Unfortunately, a fatal error has occurred. Please report this error to the Bundler issue tracker at https://github.com/carlhuda/bundler/issues so that we can fix it. Thanks!

I have visited that github link and someone had the same issue but gets directed to Heroku, https://github.com/carlhuda/bundler/issues/1488 . I have sent an email to the mailing list of Heroku and am waiting for a reply.

I ran into LoadError: no such file to load -- dm-sqlite-adapter So I added that into the Gemfile and Gemfile.lock and this is as far as I can ever get

I have tried to instal and setup Postgres locally but thats brand new set of pains that i'm slowly learning but can not get to work yet.

I have also read each and every question here with a simular issue, some progressed me to this point and some dont have responses from the asker and leave it a mystery.

Gemfile

-----------------
source :rubygems
gem 'sinatra', '1.1.0'
gem 'thin', '1.2.7'
gem 'data_mapper'
gem 'dm-postgres-adapter'
gem 'dm-sqlite-adapter'

Gemfile.lock

------------------------
...
dm-sqlite-adapter (1.2.0)
  dm-do-adapter (~> 1.2.0)
  do_sqlite3 (~> 0.10.6)
...

Procfile

--------------------
web: bundle exec ruby recall.rb -p $PORT

Recall.rb

---------------------
require 'rubygems'  
require 'sinatra'
require 'data_mapper'

DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/recall.db")


class Note
    include DataMapper::Resource
    property :id, Serial
    property :content, Text, :required => true
    property :complete, Boolean, :required => true, :default => 0
    property :created_at, DateTime
    property :updated_at, DateTime
end

DataMapper.auto_upgrade!

get '/' do
    @notes = Note.all :order => :id.desc
    @title = 'All Notes'
    erb :home
end

Notes

-------------------------
10.7 Lion
Xcode 4 is installed
sqlite3 installed by Homebrew


~ which sqlite3
  
/usr/bin/sqlite3

~ gem list sql
sqlite3 (1.3.5)
sqlite3-ruby (1.3.3)

~ gem list do_sqlite3
do_sqlite3 (0.10.7)

~ brew info sqlite3
sqlite 3.7.9
http//sqlite.org/
Depends on: readline
/usr/local/Cellar/sqlite/3.7.9 (9 files, 1.9M)
http//github.com/mxcl/homebrew/commits/master/Library/Formula/sqlite.rb

Error Log

------------------------------
~ rubyfish2 git:(master) git push heroku master
Counting objects: 22, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (14/14), done.
Writing objects: 100% (15/15), 2.42 KiB, done.
Total 15 (delta 8), reused 0 (delta 0)

-----> Heroku receiving push
-----> Removing .DS_Store files
-----> Ruby app detected
-----> Installing dependencies using Bundler version 1.1.rc.7

Running: bundle install --without development:test --path vendor/bundle --binstubs bin/ --deployment

Fetching gem metadata from http//rubygems.org/.........

Using addressable (2.2.6)

Using bcrypt-ruby (3.0.1)

Using daemons (1.1.5)

Using dm-core (1.2.0)

Using dm-aggregates (1.2.0)

Using dm-constraints (1.2.0)

Using dm-migrations (1.2.0)

Using fastercsv (1.5.4)

Using json (1.6.4)

Using json_pure (1.6.4)

Using multi_json (1.0.4)

Using dm-serializer (1.2.1)

Using dm-timestamps (1.2.0)

Using dm-transactions (1.2.0)

Using stringex (1.3.0)

Using uuidtools (2.1.2)

Using dm-types (1.2.1)

Using dm-validations (1.2.0)

Using data_mapper (1.2.0)

Using data_objects (0.10.7)

Using dm-do-adapter (1.2.0)

Using do_postgres (0.10.7)

Using dm-postgres-adapter (1.2.0)

Installing do_sqlite3 (0.10.7) with native extensions Unfortunately, a fatal error has occurred. Please report this error to the Bundler issue tracker at https//github.com/carlhuda/bundler/issues so that we can fix it. Thanks!

/usr/local/lib/ruby/1.9.1/rubygems/installer.rb:483:in `rescue in block in build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)

/usr/local/bin/ruby extconf.rb

checking for sqlite3.h... no

*** 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

Gem files will remain installed in /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/do_sqlite3-0.10.7 for inspection.

Results logged to /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/do_sqlite3-0.10.7/ext/do_sqlite3/gem_make.out

from /usr/local/lib/ruby/1.9.1/rubygems/installer.rb:486:in `block in build_extensions'

from /usr/local/lib/ruby/1.9.1/rubygems/installer.rb:446:in `each'

from /usr/local/lib/ruby/1.9.1/rubygems/installer.rb:446:in `build_extensions'

from /usr/local/lib/ruby/1.9.1/rubygems/installer.rb:198:in `install'

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/source.rb:90:in `block in install'

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/rubygems_integration.rb:82:in `preserve_paths'

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/source.rb:89:in `install'

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/installer.rb:73:in `block in install_gem_from_spec'

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/rubygems_integration.rb:97:in `with_build_args'

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/installer.rb:72:in `install_gem_from_spec'

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/installer.rb:56:in `block in run'

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/installer.rb:55:in `run'

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/installer.rb:12:in `install'

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/cli.rb:220:in `install'

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/vendor/thor/task.rb:22:in `run'

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task'

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/vendor/thor.rb:263:in `dispatch'

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/vendor/thor/base.rb:386:in `start'

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/bin/bundle:13:in `<top (required)>'

from vendor/bundle/ruby/1.9.1/bin/bundle:19:in `load'

from vendor/bundle/ruby/1.9.1/bin/bundle:19:in `<main>'
 !
 !     Failed to install gems via Bundler.
 !
 !     Heroku push rejected, failed to compile Ruby app
like image 729
tripdragon Avatar asked Jan 14 '12 23:01

tripdragon


1 Answers

The error when installing do_sqlite (Installing do_sqlite3 (0.10.7) with native extensions...) is simply because this gem requires the sqlite3 libraries to be installed, and they are not on Heroku. To fix it, remove dm-sqlite-adapter (which is what idepends on do_sqlite) from your Gemfile. If you want to keep Sqlite for development and use Postgres for production, you can use Gembundler's groups:

gem 'dm-postgres-adapter', :group => :production
gem 'dm-sqlite-adapter', :group => :development

This way, the postgresql adapter will be installed in production on Heroku, but sqlite will be used locally for development.

The line in your code that sets up Datamapper is:

DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/recall.db")

This looks for a environment variable DATABASE_URL and if it's present uses it otherwise uses the sqlite url. Getting the LoadError: no such file to load -- dm-sqlite-adapter error suggests that this variable isn't actually set. Run heroku config, there should be entries for DATABASE_URL and SHARED_DATABASE_URL. If they are not set you need to add the database.

Have a look at this other SO question which deals with a similar issue. The solution there was to run heroku addons:add shared-database:5mb.

like image 52
matt Avatar answered Nov 16 '22 06:11

matt