Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sinatra + Heroku + Datamapper deploy issues with dm-sqlite-adapter

For some reason, heroku tries to require dm-sqlite-adapter, even though it should use Postgres here. Note, that this happens when I open any URL - not during the git push itself.

I built a default facebook app.

The Gemfile:

source :gemcutter

gem "foreman"

gem "sinatra"
gem "mogli"
gem "json"
gem "httparty"
gem "thin"
gem "data_mapper"
gem "heroku"

group :production do
    gem "pg"
    gem "dm-postgres-adapter"
end

group :development, :test do
    gem "sqlite3"
    gem "dm-sqlite-adapter"
end

Datamapper setup:

# Setting up the database
DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/data/mydatabase.db")

Relevant log fragment, when any URL is opened:

Starting process with command `bundle exec thin -R config.ru start -p 34984`
2012-01-18T15:11:55+00:00 app[web.1]: /app/vendor/bundle/ruby/1.9.1/gems/dm-core-1.2.0/lib/dm-core/adapters.rb:163:in `require': no such file to load -- dm-sqlite-adapter (LoadError)
2012-01-18T15:11:55+00:00 app[web.1]:   from /app/vendor/bundle/ruby/1.9.1/gems/dm-core-1.2.0/lib/dm-core/adapters.rb:163:in `load_adapter'

Tried related solutions, but with no help so far.

BTW: bundle install says Using do_postgres and Using dm-postgres-adapter. Am I missing something about Datamapper setup?

like image 750
LordTwaroog Avatar asked Jan 18 '12 15:01

LordTwaroog


2 Answers

Well, too many Rails apps on Heroku, I took the shared db presence for granted. heroku config showed neither DATABASE_URL or SHARED_DATABASE_URL set.

Issuing heroku addons:add shared-database:5mb solved the problem.

Strange, that the db wasn't automatically added, despite having 'pg' gem in Gemfile.

Quote from http://devcenter.heroku.com/articles/cedar:

A Heroku shared PostgreSQL database (shared-database:5mb) will be automatically added to your app in any of the following cases:

  • The app is a Rails application
  • The pg gem is specified in the Gemfile
like image 110
LordTwaroog Avatar answered Nov 05 '22 11:11

LordTwaroog


Try doing DataMapper.setup(:default, ENV['DATABASE_URL'] || 'postgres://user:password@hostname/data/mydatabase.db') instead. Heroku is probably looking at the protocol, and therefore requiring SQLite’s dependencies.

like image 39
Cesar Figueroa Avatar answered Nov 05 '22 09:11

Cesar Figueroa