导轨迁移显然会导致无限分叉

时间:2019-02-26 17:14:02

标签: ruby-on-rails migration rake-task

我今天遇到了一个问题,到目前为止我还没有碰到任何运气。我创建了一个新的迁移文件(通过“ rails g migration ...”)。创建文件后,当我运行rails db:migrate或rails db:migrate:status时,结果是Rails似乎无限地自我启动-即,分叉。如果我删除了新的迁移文件,这种情况将不再发生-例如,rails db:migrate:status会导致状态报告显示并完成。为了在运行迁移时验证Rails是否在分支,我在一个单独的终端中运行:

while :; do date;echo ....................;pgrep -laf ruby; sleep 1; done

启动“ rails db:migrate”后,上述命令将显示以下模式:

Tue Feb 26 09:59:59 CST 2019
....................
23799 /home/jtc/.rvm/rubies/ruby-2.3.0/bin/ruby bin/rails db:migrate:status
Tue Feb 26 10:00:02 CST 2019
....................
23799 /home/jtc/.rvm/rubies/ruby-2.3.0/bin/ruby bin/rails db:migrate:status
23819 ruby bin/rails db:test:prepare
23837 /usr/bin/ruby-mri /home3/development/jtc/projects/s-todo/src/main/initial-
processing.rb
Tue Feb 26 10:00:03 CST 2019
....................
23799 /home/jtc/.rvm/rubies/ruby-2.3.0/bin/ruby bin/rails db:migrate:status
23819 ruby bin/rails db:test:prepare
Tue Feb 26 10:00:04 CST 2019
....................
23799 /home/jtc/.rvm/rubies/ruby-2.3.0/bin/ruby bin/rails db:migrate:status
23819 ruby bin/rails db:test:prepare
23875 ruby bin/rails db:test:prepare
Tue Feb 26 10:00:06 CST 2019
....................
23799 /home/jtc/.rvm/rubies/ruby-2.3.0/bin/ruby bin/rails db:migrate:status
23819 ruby bin/rails db:test:prepare
23875 ruby bin/rails db:test:prepare
23886 ruby bin/rails db:test:prepare

如您所见,分叉的命令是'ruby ... db:test:prepare'。还有更多细节:

其他rails(non db :)任务(到目前为止,我已经尝试过)产生相同的行为-即,在新迁移文件到位时分叉,而在新迁移文件到位时正常运行。当我运行Rails服务器时,不会发生此问题。我相信只有在运行rails / rake任务时才会发生。另外,我怀疑对config / application.rb所做的更改可能会导致它。但是,在尝试了该文件的几个较旧版本(不进行迁移的日期)并遇到相同的问题后,我得出结论,这可能不是一个因素。最后,我还注意到Rails任务最近正在测试框架中运行-即,在运行结束时(没有新的迁移文件),我看到以下内容:

Progress: |====================================================================|
Run options: --seed 37369

# Running:

Finished in 0.00505s
0 tests, 0 assertions, 0 failures, 0 errors, 0 skips

Finished in 0.004874s, 0.0000 runs/s, 0.0000 assertions/s.
0 runs, 0 assertions, 0 failures, 0 errors, 0 skips

我强烈怀疑这两个问题有关。自从上次成功迁移(2月13日)以来,我已经开始调查自己所做的更改,但尚未发现任何可疑对象。

我敢肯定大家都知道,我离Rails专家还很远。对于在哪里寻找解决问题的任何线索或指示,将不胜感激。

2 个答案:

答案 0 :(得分:0)

我假设您没有做过明智的事情,例如使用git或跟踪版本的事情(如果是的话,只需回滚所有内容)。

以防万一我停止(或在必要时kill)任何正在运行的spring

要重新解决此问题,建议您创建一个新应用并复制您的迁移并在新应用中运行它们,以确认这不是您的迁移。然后只需复制您的app和其他更改。然后安装并使用git或类似的东西使这种琐碎的问题在以后解决:)

答案 1 :(得分:0)

好的,我找到了问题的原因。我以为我会在这里回答自己的问题,以防其他有类似问题的人得到帮助。我发现,当您运行rails任务时,所有任务都已加载(我想lib / tasks /下的所有* .rake文件)。我决定隐藏我的* .rake文件(位于chmod 000目录中),并一次还原1或2个文件,以找出其中一个是否引起了问题。然后,我发现了罪魁祸首-一个瑞克任务,该任务重复使用了我的一些测试代码来创建一些模型实例,并将相应的记录插入数据库中,以便测试/调试(称为)服务一直在努力。显然,这就是即使问题在开发模式下仍在运行测试框架的原因-由于所有rake文件均已加载,因此测试代码也已加载...而且由于使用ruby加载,该代码意味着某些代码正在执行,正在加载的测试代码必须已导致建立测试环境-并且,通过执行该“借用”的测试代码还必须触发某些循环依赖关系,从而导致某种无限的递归和派生。 (我没有调查确切的原因,因为它可能要花一些时间并停止它只涉及注释掉有问题的代码,或删除rake文件。我最终还是用警惕包围了有问题的代码-即“如果是ENV ['ODD_ENV_VAR']然后...结束”,这样我仍然可以在需要时使用它。)

因此,对于任何看到相同症状的人-无限分叉和/或测试框架仅在运行rails / rake任务时在开发模式下运行(或类似的奇怪问题),我会说rake文件应该是即使在使用“ git checkout ...”之前,也要先查找一下,以便找出问题的出处。