我有一个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 任务开发的。
答案 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
只会执行测试环境。