Ruby on rails 运行影响数据库的每日脚本

Ruby on rails 运行影响数据库的每日脚本,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想写一个脚本,我可以在我的Rails应用程序下配置cron每24小时运行一次 script.rb User.all.each do |user| days = user[:days] if days >= 1 days = days - 1 end user.update_attribute(:days, days) end 但是,无论何时运行此操作,都会出现以下错误: 未初始化常量用户(名称错误) 怎么了 如果您在Rails应用程序

我想写一个脚本,我可以在我的Rails应用程序下配置cron每24小时运行一次

script.rb

User.all.each do |user|
    days = user[:days]

    if days >= 1
        days = days - 1
    end

    user.update_attribute(:days, days)
end
但是,无论何时运行此操作,都会出现以下错误:

未初始化常量用户(名称错误)


怎么了

如果您在Rails应用程序的主目录中,则只需执行以下操作:

rails runner -e production script.rb
对于cron(假设script.rb再次位于home dir中):

  • 找到您的
    捆绑包的完整路径(
    哪个捆绑包
  • 在crontab中添加(相应地更改捆绑包和项目路径):

    0****cd/project\u home&/bundle\u exec rails runner-e production script.rb可执行文件


  • 另一种方法是
    在脚本顶部要求_relative'config/environment.rb'
    (根据您的用例调整路径);这会对性能造成轻微的影响,但如果您每天只运行一次,几秒钟的启动惩罚就无关紧要了

    此外,您可能需要适当地设置
    RAILS\u ENV
    ,以访问适当的数据库表。

    我总是使用它来管理cron作业

    在任何时候安装
    ,然后将以下脚本添加到
    config/schedule.rb

    every :day do
      runner 'User.all.each {|user| user.decrement!(:days) if user.days > 0}'
    end
    

    然后从终端运行
    ,只要-w

    未定义的局部变量或main:Object的“script”方法(NameError)是否从项目的主目录运行
    rails runner script.rb
    ?不,从一个子目录,我会四处移动。现在我得到了一个完全错误,fe_sendauth:没有提供密码(PG::ConnectionBad)看看您的
    config/database.yml
    ,生产环境的密码是否类似于