【问题标题】:rake db:migrate and rake db:create both work on test database, not development databaserake db:migrate 和 rake db:create 都适用于测试数据库,而不是开发数据库
【发布时间】:2012-04-13 09:27:29
【问题描述】:

我是 Stack Overflow 和 Ruby on Rails 的新手。我的问题是,当我运行命令 rake db:create 或 rake db:migrate 时,测试数据库受到影响,但开发数据库不受影响。

导轨 (3.2.2)

我的数据库.yml:

# 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: &test
  adapter: postgresql
  encoding: unicode
  database: ticketee_test
  pool: 5
  username: ticketee
  password: my_password_here

development: 
  adapter: postgresql
  encoding: unicode
  database: ticketee_development
  pool: 5
  username: ticketee
  password: my_password_here

production:
  adapter: postgresql
  encoding: unicode
  database: ticketee_production
  pool: 5
  username: ticketee
  password: my_password_here

cucumber:
  <<: *test

感谢您的建议,但恐怕不是这个原因。我的 RAILS_ENV=发展。当我启动 rails 服务器时,服务器运行开发数据库。如果我运行“rails server -e test”,那么服务器使用测试数据库。我仍然不确定为什么要在我的测试数据库上运行迁移...

更新: 根据一个建议,我将除开发之外的所有数据库配置都注释掉了,现在我得到了一个错误。我正在运行 postgresql,我安装了 gem 'pg'。首先,我的新database.yml:

development:
  adapter: postgresql
  encoding: unicode
  database: ticketee_development
  pool: 5
  username: ticketee
  password: my_password_here

# 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: &test
#  adapter: postgresql
#  encoding: unicode
#  database: ticketee_test
#  pool: 5
#  username: ticketee
#  password: my_password_here

#production:
#  adapter: postgresql
#  encoding: unicode
#  database: ticketee_production
#  pool: 5
#  username: ticketee
#  password: my_password_here

#cucumber:
#  <<: *test

我的错误信息!

Someguys-MacBook-Air:ticketee someguy$ rake db:migrate
rake aborted!
database configuration does not specify adapter

Tasks: TOP => db:migrate => db:load_config
(See full trace by running task with --trace)
Someguys-MacBook-Air:ticketee someguy$ rake db:migrate -t
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Invoke rails_env (first_time)
** Execute rails_env
** Execute db:load_config
rake aborted!
database configuration does not specify adapter
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract/connection_specification.rb:45:in `resolve_hash_connection'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract/connection_specification.rb:39:in `resolve_string_connection'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract/connection_specification.rb:23:in `spec'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract/connection_specification.rb:127:in `establish_connection'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/activerecord-3.2.2/lib/active_record/railtie.rb:76:in `block (2 levels) in <class:Railtie>'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/activesupport-3.2.2/lib/active_support/lazy_load_hooks.rb:36:in `instance_eval'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/activesupport-3.2.2/lib/active_support/lazy_load_hooks.rb:36:in `execute_hook'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/activesupport-3.2.2/lib/active_support/lazy_load_hooks.rb:43:in `block in run_load_hooks'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/activesupport-3.2.2/lib/active_support/lazy_load_hooks.rb:42:in `each'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/activesupport-3.2.2/lib/active_support/lazy_load_hooks.rb:42:in `run_load_hooks'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/activerecord-3.2.2/lib/active_record/base.rb:718:in `<top (required)>'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/activerecord-3.2.2/lib/active_record/railties/databases.rake:6:in `block (2 levels) in <top (required)>'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `block in execute'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain'
/Users/someguy/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/task.rb:176:in `block in invoke_prerequisites'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/task.rb:174:in `each'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/task.rb:174:in `invoke_prerequisites'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/task.rb:157:in `block in invoke_with_call_chain'
/Users/someguy/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block (2 levels) in top_level'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block in top_level'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `block in run'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/bin/rake:19:in `load'
/Users/someguy/.rvm/gems/ruby-1.9.3-p125@defaultGems/bin/rake:19:in `<main>'

使用上面的 database.yml,rake db:create:all RAN CORRECTLY 并创建了我的表。但是,我的迁移仍然失败,堆栈跟踪与上述相同。

我将我的 database.yml 更改为: 发展: 适配器:sqlite3 数据库:db/development.sqlite3 游泳池:5 超时:5000

test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000

更新:我将我的 database.yml 完全更改为:

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

test: &test
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000

cucumber:
  <<: *test

现在,当我运行 rake db:drop:all,然后运行 ​​rake db:migrate 时会发生这种情况。 rake db:migrate 命令运行迁移,创建一个 db/test.sqlite3 并向其中添加一个表。因此,我的迁移仍在测试环境中运行。当我运行 rake environment RAILS_ENV=development db:migrate 时,会发生同样的事情,我得到一个 test.sqlite3 文件...

【问题讨论】:

  • 我唯一的建议是您在环境中设置了 RAILS_ENV=test?
  • 好建议,但恐怕不是。
  • 您是否尝试注释掉除开发之外的所有内容并查看会发生什么?可能不起作用,但可能会给您一个导致解决方案的错误。
  • 好主意 hutsfromshadow,现在我在控制台中收到一条错误消息!我在帖子中留下了更多细节......
  • 我在使用 pg gem 时遇到了问题,所以我使用了gem install ruby-pg,没有任何问题。

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

听起来您的解决方案可能涉及几件事。由于现有元素,您的环境可能会混淆迁移。使用以下方法重置数据库:

rake db:reset

rake db:drop db:create

根据您的环境,您应该能够进行迁移。

rake db:migrate

PS - 您可能需要在每个命令的开头添加bundle exec

祝你好运。

【讨论】:

    【解决方案2】:

    您可以使用 rake db:migrate RAILS_ENV="development"

    或者你可以使用like

    设置 RAILS_ENV=development

    rake db:迁移

    【讨论】:

      【解决方案3】:

      在 activerecord/lib/active_record/tasks/database_tasks.rb:

      environments << 'test' if environment == 'development' && ENV['RAILS_ENV'].nil?
      

      在 2014 年 1 月 8 日之前看起来是这样的:

      environments << 'test' if environment == 'development'
      

      【讨论】:

        【解决方案4】:

        分叉错误! 也许是一些缓存或日志问题它表明我们的代码中没有任何错误。

        我的团队解决了它。

        • 删除项目

        • git 克隆项目

        • 配置database.yml

        • 启动服务器

        一切正常!

        同一个项目的错误消失了! 所以我们认为这是环境问题或缓存或日志。

        【讨论】:

          【解决方案5】:

          从昨晚开始,我遇到了完全相同的问题。不知道是什么原因造成的,但最终找到了一个可行的解决方案。在 config/environments/develop.rb 的配置块中,我添加了:

          Rails.env = 'development'
          

          希望对你也有用

          【讨论】:

          • config/environments/name.rb 应该与 database.yml 中的名称匹配。 Rails 更多的是约定而不是配置。
          【解决方案6】:

          您的 yml 文件中缺少 host: localhost

          将您的配置更改为:

          development:
            adapter: postgresql
            encoding: unicode
            host: localhost
            database: ticketee_development
            pool: 5
            username: ticketee
            password: my_password_here
          

          【讨论】:

          • 我指定了主机,同样的问题。请记住,我可以将迁移写入上面的测试数据库,但在任何情况下我都无法写入开发。
          • 我怀疑是空格问题。在 vim 中使用vi /path/to/database.yml 打开文件,输入:set list 以查看所有不可见字符。
          • 我刚刚尝试过,我看到 $ 符号就在我希望看到它们的位置,不过感谢 vi 提示,这将派上用场。
          • 该死,我认为这肯定是问题所在。
          • 问题是它声称未指定适配器。
          猜你喜欢
          • 2013-04-17
          • 1970-01-01
          • 2011-08-03
          • 1970-01-01
          • 2012-05-08
          • 2016-05-11
          • 2013-11-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多