每当宝石 - 未定义的方法'(methodhere)' for User(call' User.connection'建立连接):Class

时间:2018-04-10 17:46:33

标签: ruby-on-rails ruby whenever

我试图将Whenever gem实现到我的RoR 5应用程序中。每年一次,我希望它在我的“用户”中运行一种方法。模型,但出于测试目的,我每分钟都做一次,如下:

Schedule.rb:

set :output, "/home/ubuntu/workspace/log/cron.log"

every 1.minute do
    runner "User.(methodhere)"
end

User.rb:

def (methodhere)
  User.all.each do |user|
    user.update(remaining_days: user.total_days)
  end
end

在多个地方,我读过有时cronjobs在开发模式下无法正常运行,所以我跳过了所有的环节,让我的应用程序进入生产模式,这没有帮助。

然后我发现您可以在命令行中手动运行这些作业,然后我尝试使用找到的命令执行:

whenever --update-cron

然后

crontab -l

显示

# Begin Whenever generated tasks for: 
/home/ubuntu/workspace/config/schedule.rb
* * * * * /bin/bash -l -c 'cd /home/ubuntu/workspace && bundle exec bin/rails 
runner -e production '\''User.year_days_reset'\'' >> 
/home/ubuntu/workspace/log/cron.log 2>&1'

正在运行

/bin/bash -l -c 'cd /home/ubuntu/workspace && bundle exec bin/rails 
runner -e production '\''User.(methodhere)'\'' >> 
/home/ubuntu/workspace/log/cron.log 2>&1'

在日志中留下了一个错误,如下所示:

Please specify a valid ruby command or the path of a script to run.
Run 'bin/rails runner -h' for help.

undefined method `(methodhere)' for User (call 'User.connection' to 
establish a connection):Class

许多谷歌搜索都没有给我留下任何东西。

注意:在rails控制台中手动运行我的方法(methodhere)可以完全按照我的意愿运行。我是RoR的新开发者,所以对此事的任何指导都将不胜感激,谢谢!

编辑:@maxpleaner指出我在User.new。(methodhere)中缺少.new,修复了错误,但是我有一个新问题。我在schedule.rb中的代码似乎没有执行任何操作,因为它应该每分钟发生但它什么都不做。

1 个答案:

答案 0 :(得分:2)

您必须拥有User类方法

class User
  def self.method
    ...
  end
end

通过这种方式,您可以在计划文件中使用User.method。