我在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服务器?
谢谢。
答案 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 :(得分: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