铁路迁移显然导致无限的分叉

问题描述 投票:1回答:2

我今天遇到了一个问题,到目前为止我没有任何运气追踪。我创建了一个新的迁移文件(通过'rails g migrate ...')。创建文件后,当我运行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(非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日)以来我已经改变了什么,但还没有找到任何嫌疑人。

我相信你们都知道,我远非铁路专家。任何寻找解决问题的线索或指针都将非常感激。

ruby-on-rails migration rake-task
2个回答
0
投票

我假设你没有做过一些明智的事情,比如使用git或其他东西来跟踪你的版本控制(如果是这样,只需回滚一切)。

万一我会停止(或kill,如果有必要)任何正在运行的spring

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


0
投票

好的,我找到了问题的原因。我想我会在这里回答我自己的问题,以防其他人遇到类似的问题。我发现当你运行rails任务时,你的所有任务都被加载了(我认为lib / tasks /下的所有* .rake文件都是如此)。我决定隐藏我的* .rake文件(在chmod 000目录中)并一次恢复它们1或2,以查明其中一个是否导致了问题;并且,这样做,我找到了罪魁祸首 - 一个rake任务,重新使用我的一些测试代码来创建一些模型实例,并将相应的记录插入到数据库中,以便测试/调试(我称之为)服务我一直在努力。显然,这就是为什么测试框架正在运行,即使问题出现在开发模式中 - 因为所有rake文件都被加载,测试代码也被加载了......而且因为使用ruby加载代码意味着一些代码被执行,加载的测试代码必须导致设置测试环境 - 同样,必须通过执行“借用”测试代码触发一些循环依赖,从而产生一种无限递归和分叉。 (我没有调查确切的原因,因为它可能需要一些时间并且停止它只需简单地注释掉有问题的代码,或者删除rake文件。我最后用一个警卫围绕着有问题的代码 - 即“如果ENV ['ODD_ENV_VAR']然后......结束“,这样我仍然可以在需要时使用它。)

所以对于任何看到相同症状的人 - 无限分叉和/或测试框架在dev模式下运行(或者类似的奇怪问题)只在运行rails / rake任务时发生,我会说rake文件应该是第一个看看,甚至在使用'git checkout ...'之前,以便找出引入问题的时间。

© www.soinside.com 2019 - 2024. All rights reserved.