【发布时间】:2017-12-21 17:22:29
【问题描述】:
我使用 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
但结果不一样:模式“keyman”是为 keyman_dev 数据库创建的,但不是为 keyman_test 数据库创建的。
我需要显式运行 rake db:init RAILS_ENV=test 以获取在测试数据库上创建的架构。
对我来说这听起来很奇怪!你有解释吗? 谢谢
【问题讨论】:
标签: ruby-on-rails postgresql rake rake-task