gpt4 book ai didi

ruby-on-rails - rake 开发和测试之间的不一致行为?

转载 作者:行者123 更新时间:2023-11-29 14:35:39 25 4
gpt4 key购买 nike

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

    # 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 以获取在测试数据库上创建的模式。

我听着很奇怪!你有解释吗?谢谢

最佳答案

当运行 bin/rake -T db 时,我们可以看到 db:createdb: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

因此,当您在开发环境中运行这些任务时,它们同时执行 developmenttest 数据库,但这并不意味着其他任务(例如您的自定义任务)自动在两个环境中运行,您的任务仍然只在 development 环境中运行。

在您的 rake 任务中,像这样的东西应该让该查询在两个表中运行,尽管这是未经测试的。

environments = Rails.env.development? ? [:development, :test] : [Rails.env.to_sym]

environments.each do |env|
ActiveRecord::Base.establish_connection(env)
# do something
end

关于ruby-on-rails - rake 开发和测试之间的不一致行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45139714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com