Rake db:在开发和测试环境中重置执行

时间:2017-03-01 20:15:55

标签: ruby-on-rails database rake environment

我有一个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 任务开发的。

1 个答案:

答案 0 :(得分:0)

  

我已经读过Rake在两个环境中运行任务的地方   没有定义RAILS_ENV。

这不正确。如果环境为<fo:block> <fo:inline font-weight="normal"> <fo:leader leader-pattern="dots"/> <fo:index-page-citation-list> <fo:index-key-reference ref-index-key="{.};{../title};;" font-weight="bold"> <fo:index-page-number-prefix> <fo:inline> <xsl:value-of select="ancestor::something/SomethigElse"/>. </fo:inline> </fo:index-page-number-prefix> </fo:index-key-reference> </fo:index-page-citation-list> </fo:inline> </fo:block> ,则development也会添加到当前环境中。请参阅:https://github.com/rails/rails/blob/f507085fa2a7625324e6f4e3ecef9b27dabefb4f/activerecord/lib/active_record/tasks/database_tasks.rb#L339

所以这是预期的行为。

另一方面,你所说的对任何其他环境都是如此。例如。 test只会执行测试环境。