我使用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以获取在测试数据库上创建的模式。
这听起来很奇怪!你有解释吗? 感谢
答案 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:drop
和rake 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