在开发和测试之间耙出不一致的行为?

时间:2017-07-17 08:50:40

标签: ruby-on-rails postgresql rake rake-task

我使用PostgreSQL数据库开发了一个RoR应用程序,基于这个database.yml定义:

    # PostGre databases

    default: &default
      host : localhost
      adapter: postgresql
      encoding: unicode
      pool: 5
      username: keyman
      password: keymanApp
      schema_search_path: "keyman"

    development:
      <<: *default
      database: keyman_dev

    test:
      <<: *default
      database: keyman_test

我创建了一个小的Rake例程,因此我可以轻松地删除并创建我的postgreSQL数据库,包括我使用的模式:

        namespace :db do
            desc 'Create database schemas before going for the first migration'
            task init: ['db:drop','db:create'] do
            ActiveRecord::Base.connection.execute("CREATE SCHEMA keyman AUTHORIZATION keyman")
            puts 'Database initialised'
            end
          end

当我运行rake db:init时,它在开发和测试环境中执行:

$ rake db:init
Dropped database 'keyman_dev'
Dropped database 'keyman_test'
Created database 'keyman_dev'
Created database 'keyman_test'
Database initialised

但结果并不相同:架构&#39; keyman&#39;是为keyman_dev数据库创建的,但不是为keyman_test数据库创建的。

我需要显式运行rake db:init RAILS_ENV = test以获取在测试数据库上创建的模式。

这听起来很奇怪!你有解释吗? 感谢

1 个答案:

答案 0 :(得分:2)

运行.exterior { display: block; width:100px; height:100px; border: 1px black solid; }时,我们可以看到<a href="http://bing.com" class="exterior"> <object><a href="http://example.com">Interior</a></object> </a>bin/rake -T db

的以下说明
db:create

因此,当您在开发环境中运行这些任务时,它们都会执行db:droprake db:create # Creates the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:create:all to create all databases in the config). Without RAILS_ENV or when RAILS_ENV is development, it defaults to creating the development and test databases rake db:drop # Drops the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config). Without RAILS_ENV or when RAILS_ENV is development, it defaults to dropping the development and test databases 数据库,但这并不代表其他任务(例如您的自定义任务)在两个环境中自动运行,您的任务仍然只在development环境中运行。

rake任务中的这类内容应该让查询在两个表中运行,尽管这是未经测试的。

test