2015-09-01 93 views
3

我得到一個錯誤(在Sinatra + ActiveRecord Heroku)Database configuration does not specify adapter數據庫配置沒有指定適配器(Sinatra + Heroku + Activerecord)

從一些研究看來,這是因爲Heroku預計在機架上不會使用環境變量。

我從列出數據庫URL的db環境文件中刪除了env vars,但仍然收到相同的錯誤。

編輯:這也工作了一天前db文件不變,所以我不知道什麼是錯的。

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 

這裏是數據庫配置文件。

#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:[email protected]/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:[email protected]/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 

這裏的database.yml文件:

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 

編輯2:它看起來像損傷來自四個提交之一。下面看看其中的一個變化:(編輯3:https://www.dropbox.com/s/dnw41av20uoxf8w/GitHub%20Diff2.pdf?)

+0

顯示數據庫配置? –

+1

您可能想隱藏該文件中的用戶/密碼/主機信息。只是爲了額外的安全 – thesecretmaster

+0

是的,完成。我們發現上面鏈接的破壞提交。我們認爲錯誤來自在一個不好的rspec測試中(在文件的最後)使用保留字'include'。 – Phil

回答

5

今天我有同樣的問題,並聯系尋求幫助的Heroku支持。

他們指示我在自己的Ruby構建組最近的變化,在這裏看到:https://devcenter.heroku.com/changelog-items/709

我更新了我的database.yml文件,以反映這種變化,並引用了生產DATABASE_URL,和我的應用程序部署再次。

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

美麗。你是聖人 - 感謝一羣!這非常具有破壞性,應該很容易更新Sinatra/ActiveRecord應用程序的紅寶石擁有者。 – Phil

1

你不需要像這樣做URL解析。如果可用,我在幾年前修補了ActiveRecord,默認爲使用ENV['DATABASE_URL']。所以,如果它的設置(這是在Heroku上,如果你已經安裝了heroku-postgresql),那麼只需要調用ActiveRecord.establish_connection,它會工作:http://apidock.com/rails/ActiveRecord/Base/establish_connection/class

+0

我回來了 - 這看起來不是問題。任何想法會帶來這個錯誤? – Phil

相關問題