Database configuration does not specify adapter (Sinatra + Heroku + Activerecord)

匿名 (未验证) 提交于 2019-12-03 00:57:01

问题:

I'm getting an error (on Sinatra + ActiveRecord Heroku) that Database configuration does not specify adapter.

From some research, it looks like this is because Heroku expects there to be no environmental variables used during rackup.

I removed the env vars from the db environments file that listed the database URL, but I'm still getting the same error.

EDIT: This also worked just a day ago with the db files unchanged, so I'm not sure what could be wrong.

2015-09-01T02:44:40.980448+00:00 app[web.1]: I, [2015-09-01T02:44:40.980313 #3]  INFO -- : Refreshing Gem list 2015-09-01T02:44:41.459544+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/connection_specification.rb:171:in `spec': database configuration does not specify adapter (ActiveRecord::AdapterNotSpecified) 2015-09-01T02:44:41.459548+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.4/lib/active_record/connection_handling.rb:50:in `establish_connection' 2015-09-01T02:44:41.459550+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/sinatra-activerecord-2.0.8/lib/sinatra/activerecord.rb:43:in `database=' 2015-09-01T02:44:41.459552+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1216:in `set' 2015-09-01T02:44:41.459554+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/sinatra-activerecord-2.0.8/lib/sinatra/activerecord.rb:35:in `database_file=' 2015-09-01T02:44:41.459555+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1216:in `set' 2015-09-01T02:44:41.459556+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/sinatra-activerecord-2.0.8/lib/sinatra/activerecord.rb:19:in `registered' 2015-09-01T02:44:41.459560+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1399:in `block in register' 2015-09-01T02:44:41.459562+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1397:in `each' 2015-09-01T02:44:41.459563+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1397:in `register' 2015-09-01T02:44:41.459565+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1977:in `register' 2015-09-01T02:44:41.459566+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:2038:in `register' 2015-09-01T02:44:41.459567+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/sinatra-activerecord-2.0.8/lib/sinatra/activerecord.rb:54:in `<module:Sinatra>' 2015-09-01T02:44:41.459569+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/sinatra-activerecord-2.0.8/lib/sinatra/activerecord.rb:10:in `<top (required)>' 2015-09-01T02:44:41.459571+00:00 app[web.1]:    from /app/app.rb:2:in `require' 2015-09-01T02:44:41.459575+00:00 app[web.1]:    from /app/app.rb:2:in `<top (required)>' 2015-09-01T02:44:41.459576+00:00 app[web.1]:    from config.ru:2:in `require' 2015-09-01T02:44:41.459578+00:00 app[web.1]:    from config.ru:2:in `block in <main>' 2015-09-01T02:44:41.459587+00:00 app[web.1]:    from config.ru:1:in `<main>' 2015-09-01T02:44:41.459589+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/unicorn-4.9.0/lib/unicorn.rb:48:in `eval' 2015-09-01T02:44:41.459590+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/unicorn-4.9.0/lib/unicorn.rb:48:in `block in builder' 2015-09-01T02:44:41.459581+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/rack-1.6.4/lib/rack/builder.rb:55:in `instance_eval' 2015-09-01T02:44:41.459600+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/bin/unicorn:23:in `load' 2015-09-01T02:44:41.459582+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/rack-1.6.4/lib/rack/builder.rb:55:in `initialize' 2015-09-01T02:44:41.459601+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/bin/unicorn:23:in `<main>' 2015-09-01T02:44:41.459584+00:00 app[web.1]:    from config.ru:1:in `new' 2015-09-01T02:44:41.459593+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/unicorn-4.9.0/lib/unicorn/http_server.rb:768:in `build_app!' 2015-09-01T02:44:41.459595+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/unicorn-4.9.0/lib/unicorn/http_server.rb:137:in `start' 2015-09-01T02:44:41.459598+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/unicorn-4.9.0/bin/unicorn:126:in `<top (required)>' 2015-09-01T02:44:41.459592+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.0.0/gems/unicorn-4.9.0/lib/unicorn/http_server.rb:768:in `call' 2015-09-01T02:44:42.358161+00:00 heroku[web.1]: State changed from starting to crashed 2015-09-01T02:44:42.351187+00:00 heroku[web.1]: Process exited with status 1 

Here's the database config files.

#The environment variable DATABASE_URL should be in the following format: # => postgres://{user}:{password}@{host}:{port}/path     configure :development, :production do  db = URI.parse("REMOVED ACTUAL DB URL")   ActiveRecord::Base.establish_connection(         :adapter => db.scheme == 'postgres' ? 'postgresql' : db.scheme,         :host     => db.host,         :username => db.user,         :password => db.password,         :database => db.path[1..-1],         :encoding => 'utf8' )  #adding development REDIS config ENV["REDISTOGO_URL"] = "REMOVED ACTUAL DB URL"  end    configure :development do  db = URI.parse('postgres://postgres:PASS@localhost/development')  #adding development REDIS config ENV["REDISTOGO_URL"] = "REMOVED ACTUAL REDIS URL"  ActiveRecord::Base.establish_connection(         :adapter => db.scheme == 'postgres' ? 'postgresql' : db.scheme,         :host     => db.host,         :username => db.user,         :password => db.password,         :database => db.path[1..-1],         :encoding => 'utf8' ) end      #set up the test database configure :test do  db = URI.parse('postgres://postgres:PASS@localhost/test')   #adding development REDIS config ENV["REDISTOGO_URL"] =         "REMOVED ACTUAL DB URL"  ActiveRecord::Base.establish_connection(         :adapter => db.scheme == 'postgres' ? 'postgresql' : db.scheme,         :host     => db.host,         :username => db.user,         :password => db.password,         :database => db.path[1..-1],         :encoding => 'utf8' ) end 

Here's the database.yml file:

development:   adapter: postgresql   database: development   username: <%= ENV['PG_USER'] %>   password: <%= ENV['PG_PASS'] %>   host: localhost  test:   adapter: postgresql   database: test   username: <%= ENV['PG_USER'] %>   password: <%= ENV['PG_PASS'] %>   host: localhost 

EDIT 2: It Looks like the damage comes from one of four commits. Here's a look at what changed in one of those: (EDIT 3: https://www.dropbox.com/s/dnw41av20uoxf8w/GitHub%20Diff2.pdf?)

回答1:

I had the same problem today, and contacted Heroku support for assistance.

They directed me to a recent change in their Ruby build pack, see here: https://devcenter.heroku.com/changelog-items/709

I updated my database.yml file to reflect the change, and reference the DATABASE_URL for production, and my app is deploying again.

production:   url: <%= ENV['DATABASE_URL'] %> 


回答2:

You shouldn't need to do the URL parsing like this. I patched ActiveRecord a few years ago to default to using ENV['DATABASE_URL'] if it's available. So if it's set (which it is on Heroku if you have heroku-postgresql installed) then just call ActiveRecord.establish_connection and it'll work: http://apidock.com/rails/ActiveRecord/Base/establish_connection/class



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!