【发布时间】:2026-01-02 06:30:01
【问题描述】:
我有一个 Ruby on Rails v5 应用程序,我正在尝试在开发环境中运行以下 Rake 任务:
rake db:reset
遗憾的是,Rake 在开发和测试环境中运行任务。由于我不使用测试环境,我不想将我的数据库翻倍。当没有定义 RAILS_ENV 时,我在某处读过 Rake 在两种环境中运行任务。所以我尝试将以下行添加到我的 .bash_profile 中,但没有成功:
export RAILS_ENV="development"
我也尝试在我的任务结束时添加 RAILS_ENV=development,但它也没有奏效。
有没有办法只在开发中使用 Rake?
更新 #1
感谢 Taryn East 的快速评论。我正在尝试尽快更新我的帖子,以便您轻松高效地回答。
当您运行该命令时,您实际观察到了什么?
该命令只需执行两次。由于我的开发和测试环境有不同的数据库,所以目前它没有显示任何错误。另一方面,它确实迫使我无缘无故地使用两个数据库。我还尝试为这两个环境设置相同的数据库,但是由于 Rake 尝试在数据库上运行两次任务,所以我遇到了错误。
例如 rake db:drop 的输出
Dropped database 'db'
Database 'db' does not exist
它确实删除了我的数据库,但正如您所见,Rake 尝试在另一个环境中再次运行该命令。
你为什么不用测试环境?
因为我没有看到它对我当前的项目有任何好处。我没有时间创建和更新测试。我也不习惯同时使用开发和测试环境。
如果你想在一个单一的环境中运行一个 rake 任务,你也可以在命令行中添加 RAILS_ENV。
正如我在帖子中所说,它不起作用。这是我所做的:
RAILS_ENV=development rake db:drop
这是输出:
Dropped database 'db'
Database 'db' does not exist
更新 #2
这是我的 database.yml 配置:
default: &default
adapter:mysql2
pool: 5
timeout: 5000
development:
<<: *default
database: db
username: something
password: something
host: localhost
port: 3306
test:
<<: *default
database: db_test
username: something
password: something
host: localhost
port: 3306
不知道能不能帮上忙,不过我的环境是按照rake about任务开发的。
【问题讨论】:
-
你怎么知道它在多个环境中运行?当您运行该命令时,您实际观察到什么?您收到什么错误消息?其次:你为什么不使用测试环境?你绝对应该设置其中之一!它不会使您的数据库翻倍...测试数据库是仅结构的,没有任何数据,除非您的测试(您应该拥有!)实际上正在运行。第三:如果你想在一个单一的环境中运行一个 rake 任务,你也可以在命令行中添加 RAILS_ENV。例如你可以运行:
RAILS_ENV=test rake db:reset -
感谢您的回答。我在更新#1 部分回答了你。
-
"我没有时间创建和更新测试。"你也没有时间修复那些可能被这些测试提前发现的错误......;)
-
这个问题听起来确实很奇怪——听起来 rake 在两个环境中同时运行,这是不应该的。你能告诉我们你的
config/database.yml吗? (只需删除用户名/密码)? -
您对失去的时间绝对是正确的。我只是无法理解我无法在单个环境中运行我的任务。这没有道理。无论如何,我在帖子中做了另一个更新。
标签: ruby-on-rails database rake environment