Rails cron 与无论何时,设置环境
如果您了解用于创建 cron 作业的whengem,这个问题可能才有意义。 我的 Schedule.rb 中有一个任务,例如
every 1.day, :at => '4am' do
command "cd #{RAILS_ROOT} && rake thinking_sphinx:stop RAILS_ENV=#{RAILS_ENV}"
command "cd #{RAILS_ROOT} && rake thinking_sphinx:index RAILS_ENV=#{RAILS_ENV}"
command "cd #{RAILS_ROOT} && rake thinking_sphinx:start RAILS_ENV=#{RAILS_ENV}"
end
更新 crontab 时,
whenever --update-crontab appname --set environment=production
但是当我使用cron 作业 仍然有 RAILS_ENV=development 。 我现在的生产和开发任务是相同的,我只需要更改环境变量,因为thinking_sphinx需要知道当前环境。 关于如何做到这一点有什么想法吗?
谢谢!
This question will probably only make sense if you know about the whenever gem for creating cron jobs. I have a task in my schedule.rb like
every 1.day, :at => '4am' do
command "cd #{RAILS_ROOT} && rake thinking_sphinx:stop RAILS_ENV=#{RAILS_ENV}"
command "cd #{RAILS_ROOT} && rake thinking_sphinx:index RAILS_ENV=#{RAILS_ENV}"
command "cd #{RAILS_ROOT} && rake thinking_sphinx:start RAILS_ENV=#{RAILS_ENV}"
end
However when I update my crontab using
whenever --update-crontab appname --set environment=production
the cron jobs still have RAILS_ENV=development. My tasks on production and development are the same right now, I just need to change the environment variable because thinking_sphinx needs to know the current environment. Any ideas on how to do this?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
每当未检测到您的环境时,它就会默认使用生产环境。
为所有作业设置环境:
您可以使用 set:或每个作业
Whenever doesn't detect your environment, it just defaults to using production.
You can set the environment for all jobs using set:
Or per job:
不要写入 RAILS_ENV 变量。 它应该自动设置它。
它在我的应用程序中有效:
Don't write the RAILS_ENV variable. It should set it automatically.
It works in my app:
对于
Whenever (0.9.2)
使用
@environment
变量进行环境检查:For
Whenever (0.9.2)
Use the
@environment
variable for environment check:如果您使用bundler 和capistrano,您可能还想尝试其他方法。
在您的deploy.rb文件中,当您设置:whenever_command时,不要只需执行以下操作:
相反,执行以下操作:
现在,RAILS_ENV环境变量将在加载schedule.rb文件时可用,所以在schedule.rb中你现在可以这样做:
瞧! 你准备好了。
Something else you may want to try if you're using bundler and capistrano.
In your deploy.rb file, when you set the :whenever_command, DO NOT simply do this:
Instead, do this:
Now, the RAILS_ENV environment variable will be available when the schedule.rb file is loaded, so in schedule.rb you can now do this:
Voila! You're ready to go.
这个问题已经开放很长时间了,所以我想我会分享在 0.9.7、Ruby 2.4.0 和 RAILS 5.0.1 上工作过的内容。 在前面提到的答案中,有很多接近的尝试,但语法错误困扰着他们。 下面是有效的方法,并且是非常简单的方法。
Schedule.rb
更新 crontab(dev)
结果(dev)
更新 crontab(prod)
结果(prod)
希望这可以帮助别人。
快乐编码!
This questions has been open a long time so I thought I would share what worked with whenever 0.9.7, Ruby 2.4.0, and RAILS 5.0.1. In the previously mentioned answer there are a lot of close tries but syntax error plagues them. Below is what worked and is very simple approach.
schedule.rb
Update the crontab(dev)
Results(dev)
Update the crontab(prod)
Results(prod)
Hopefully this can help someone out.
Happy Coding this!
如果您想在任何时候传递多个参数,请小心。
你必须这样做:
Watch out if you want to pass more than one param to whenever.
You have to do it like that:
最新版本允许轻松集成 Capistrano。 您可以将以下内容添加到deploy.rb:
Latest whenever allows easy Capistrano integration. You can add following to deploy.rb:
我遇到了一个问题,每当 cron 作业 - /usr/bin/bundle 而不是 /usr/local/bin/bundle 被拾取时,都没有设置环境。
解决方案是将以下内容添加到schedule.rb的顶部
I was having an issue where environment wasn't being set up for whenever cron jobs - /usr/bin/bundle was being picked up instead of /usr/local/bin/bundle.
The solution was to add following to top of schedule.rb
在 config/schedule.rb 顶部添加以下代码行。
并使用以下命令更新 crontab。
然后最后使用命令重新启动 crontab
就是这样!
最终的 config/schedule.rb 看起来像这样
Add the following line of code at top of config/schedule.rb.
and update the crontab using following command.
and then finally restart crontab using command
Thats it!
Final config/schedule.rb looks this way
我会考虑使用“rake”快捷方式使其更加干净:
I would consider using the "rake" shortcut to make it even cleaner: