在heroku上,rake db:migrate失败,“数据库配置未指定适配器”

时间:2012-03-12 02:38:06

标签: ruby-on-rails heroku rake

我跟着Rails Tutorial一直到关联点。

这是shell输出:

jrhorn424 at hook in ~/Learning/rails/rails-tutorial/demo_app on master
$ heroku run rake db:migrate          
Running rake db:migrate attached to terminal... up, run.2

### Snip ###

Migrating to CreateUsers (20120310145100)
Migrating to CreateMicroposts (20120311052021)
rake aborted!
database configuration does not specify adapter

Tasks: TOP => db:schema:dump
(See full trace by running task with --trace)

我咨询了Heroku quick start,并做了一些谷歌搜索。我怀疑问题出在config/database.yml,因为在我的开发环境中,sqlite3充满了对adapter = uri.scheme adapter = "postgresql" if adapter == "postgres" 的引用。但是,在服务器上,同一文件包括以下行:

heroku run rake db:migrate

通过已部署的应用程序添加数据成功,但运行source 'https://rubygems.org' gem 'rails', '3.2.2' # Bundle edge Rails instead: # gem 'rails', :git => 'git://github.com/rails/rails.git' group :development do gem 'sqlite3', '1.3.5' end # Gems used only for assets and not required # in production environments by default. group :assets do gem 'sass-rails', '3.2.4' gem 'coffee-rails', '3.2.2' # See https://github.com/sstephenson/execjs#readme for more supported runtimes # gem 'therubyracer' gem 'uglifier', '1.2.3' end gem 'jquery-rails', '2.0.0' group :production do gem 'pg', '0.12.2' end 仍然失败。

这是我的Gemfile:

{{1}}

6 个答案:

答案 0 :(得分:3)

对我来说,当我尝试在生产中打开rails控制台时,我遇到了这个错误,

当我给出时,

bundle exec rails c RAILS_ENV=production

它会抛出错误

 `resolve_hash_connection': database configuration does not specify adapter (ActiveRecord::AdapterNotSpecified)

但是当我给出时它会起作用,

RAILS_ENV=production bundle exec rails c

答案 1 :(得分:2)

我建议您删除数据库:

bundle exec rake db:drop:all

如果您要在heroku上主持,请继续使用postgres来处理所有环境。删除sqlite gem并只包括

gem 'pg'

靠近Gemfile的顶部。

执行a:

bundle
bundle exec rake db:create
bundle exec rake db:migrate

尝试再次提交并推送(您知道该怎么做)。

如果这不起作用,请告诉我。

PS,这是我的database.yml文件的样子:

# PostgreSQL v0.8.x
#   gem install pg
 development:
  adapter: postgresql
  encoding: unicode
  host: localhost
  database: health_development
  pool: 5
  username: volpine
  password: password

  # Warning: The database defined as "test" will be erased and
  # re-generated from your development database when you run         "rake".
  # Do not set this db to the same as development or production.
 test:
  adapter: postgresql
  encoding: unicode
  host: localhost
  database: health_test
  pool: 5
  username: volpine
  password: password

production:
  adapter: postgresql
  encoding: unicode
  host: localhost
  database: health_production
  pool: 5
  username: volpine
  password: password

答案 2 :(得分:1)

我遇到了这个问题,发现手动设置RAILS_ENV对我来说很有用:

heroku run RAILS_ENV=production rake db:migrate

答案 3 :(得分:0)

当我跑heroku db:push时,我得到一个taps error,导致我转而使用ruby 1.9.2。切换版本并启动新应用后,我不再收到来自heroku run rake db:migrate的错误,一切都按预期工作。

更新:我刚收到通知,版本不匹配对db:migrate无关紧要。对于db:push来说这绝对重要,所以我不确定是什么问题。无论如何,当我使用相同的Gemfile和1.9.2初始化一个新的应用程序时,它可以工作。

答案 4 :(得分:0)

我遇到了同样的问题。它发生了,因为我从我的heroku应用程序中删除了RAILS_ENV环境变量,只留下了一个RACK_ENV环境变量。

添加RAILS_ENV =生产确实解决了问题:

heroku config:add RAILS_ENV=production --app XXXX-production

答案 5 :(得分:0)

Heroku不会查看你的database.yml文件,它会查看DATABASE_URL - 如果没有设置,或者里面有拼写错误,那么你就会收到错误。