没有弹簧的Rails跑步者

时间:2015-05-18 11:29:00

标签: ruby-on-rails ruby

我在ubuntu设置上有rails 4.2 + sidekiq,我每小时都会用cron开始我的工作,比如

bin/rails runner -e production 'MyJob.perform_later'

这基本上需要一份工作并将数据放到redis中,因此sidekiq可以接受并从那里开始。但是每次我这样做,我都会让这个春天过程中卡住并等待某些东西(消耗内存)

ps aux | grep spring
root      Sl   07:13   0:00 spring server | myapp | started 6 secs ago
root      Ssl  07:13   0:03 spring app    | myapp | started 6 secs ago | production mode

有时我会看到其中的10个。有没有办法不启动spring服务器?

谢谢。

3 个答案:

答案 0 :(得分:15)

发生这种情况是因为您正在使用spring gem并且bin文件夹已被“弹回”。

如果您查看bin/rails文件,您会看到spring已加载,然后继续运行您要求的任何内容。

您可以通过运行

“取消弹出”您的bin文件夹
bin/spring binstub --remove --all

这当然意味着您选择退出春天为您提供的所有性能优势。这应该适用于生产环境。实际上,建议您不要在生产环境中安装弹簧 [1]。

因此,我建议您修改Gemfile并将spring置于development组下。在制作中,您通常会执行以下操作:

bundle install --without development test

这样春天永远不会进入你的生产服务器。另见Github上的this related issue

-

1。 Spring project readme file

答案 1 :(得分:15)

如果你想保持一般的弹簧,你可以通过在DISABLE_SPRING环境变量前面添加一个命令来暂时禁用spring:

DISABLE_SPRING=1 bin/rails runner -e production 'MyJob.perform_later'

编辑:感谢Tom Lobato和tpett的纠正。

答案 2 :(得分:6)

它是DISABLE_SPRING=1而不是ENV=DISABLE_SPRING