Ruby on rails 无论何时Gem-未定义的方法';(methodhere)和#x27;对于用户(调用';User.connection';以建立连接):类
我正试图在我的ROR5应用程序中实现这个功能。每年一次,我希望它在我的“用户”模型中运行一个方法,但出于测试目的,我每分钟运行一次,如下所示:Ruby on rails 无论何时Gem-未定义的方法';(methodhere)和#x27;对于用户(调用';User.connection';以建立连接):类,ruby-on-rails,ruby,whenever,Ruby On Rails,Ruby,Whenever,我正试图在我的ROR5应用程序中实现这个功能。每年一次,我希望它在我的“用户”模型中运行一个方法,但出于测试目的,我每分钟运行一次,如下所示: 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 esta
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
附表2.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
然后
这表明
# 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中的代码似乎没有执行任何操作,因为它应该每分钟发生一次,但它什么也没做。您必须有一个用户类方法
class User
def self.method
...
end
end
通过这种方式,您可以在计划文件中使用User.method。如果您要调用像
User.some\u method
这样的方法,它必须是类方法,否则使用User.new.some\u method
@maxpleaner就是这样!非常感谢你,仍然在学习正确的ruby语法等等,像这样的小蠢事一直发生在我身上。@maxpleaner虽然这确实解决了错误问题,但现在我有了一个新问题;我的代码现在似乎什么都没做。在控制台中手动运行User.new.(methodhere),如果它现在正在与User.new.(methodhere)一起工作,那么仍然会执行它应该执行的操作。这样做会对它的正常工作产生任何影响吗?还有,我在哪里上这门课?抱歉,我对RoR和正确的文件放置还很陌生。我的anwers工作方式不需要创建新的用户实例。如果执行User.new,则将创建一个新的User实例。而是定义一个类方法并执行User.method。如果您创建一个新的用户实例,则每次运行该任务时都会为该对象节省内存空间,使用类方法可以避免可能的内存泄漏。