我想编写一个脚本,我可以将 cron 配置为在 Rails 应用程序下每24小时运行一次。
script.rb
User.all.each do |user|
days = user[:days]
if days >= 1
days = days - 1
end
user.update_attribute(:days, days)
end
但是,每当我运行此命令时,我都会收到此错误:
未初始化的常量User(NameError)
出了什么问题?
答案 0 :(得分:2)
如果您在Rails应用程序的主目录中,那么只需:
bundle
对于cron(假设,script.rb再次出现在主目录中):
which bundle
(0 * * * * cd /project_home && /bundle_executable exec rails runner -e production script.rb
)在crontab中添加(相应地更改包和项目路径):
*(q++)
答案 1 :(得分:0)
另一种方法是在脚本顶部require_relative 'config/environment.rb'
(调整用例的路径);这会有轻微的性能损失,但如果你每天只运行一次,那么几秒钟的启动惩罚就不重要了。
此外,您可能需要适当地设置RAILS_ENV
以访问正确的数据库表。
答案 2 :(得分:0)
我总是使用whenever来管理我的cron作业。
安装whenever
,然后将以下脚本添加到config/schedule.rb
:
every :day do
runner 'User.all.each {|user| user.decrement!(:days) if user.days > 0}'
end
然后从终端运行whenever -w
。