每当 gem schedule.rb 文件:不识别 RAILS_ROOT 变量 [英] whenever gem schedule.rb file: doesn't recognize RAILS_ROOT variable

查看:37
本文介绍了每当 gem schedule.rb 文件:不识别 RAILS_ROOT 变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在 schedule.rb 文件中,声明:

In schedule.rb file, the statement:

require "#{RAILS_ROOT}/config/environment.rb"

 every "10 10 2 * * *" do
      command "mysqldump -u #{@db_username} -p#{@db_password} --single-transaction #{@db_name} > #{@backup_Path}/#{@db_name}.sql 2> log/error_crontab.log"
 end

当我尝试从终端执行每当 cmd 时,出现以下错误:

When i try to execute the whenever cmd from terminal, getting the following error:

 config/schedule.rb:48:in `initialize': uninitialized constant Whenever::JobList::RAILS_ROOT (NameError)
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever/job_list.rb:19:in `instance_eval'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever/job_list.rb:19:in `initialize'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever.rb:16:in `new'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever.rb:16:in `cron'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever/command_line.rb:40:in `run'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever/command_line.rb:7:in `execute'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/bin/whenever:38:in `<top (required)>'
    from /usr/local/bin/whenever:19:in `load'
    from /usr/local/bin/whenever:19:in `<main>'

我正在使用 require 语句从表单中获取动态值以安排作业.请帮忙解决这个问题?

i am using the require statement to get the dynamic values from the form to schedule the job. Please help to solve this issue?

注意:我看到了以下 stackoverflow 查询:如何随时检测Rails环境

Note: i have seen the following stackoverflow queries: How to detect Rails environment inside whenever

按照此线程获取动态值,但遇到 require 语句的问题.Rails - Every gem - 动态值

Following this thread to get dynamic values, but facing problem with require statement. Rails - Whenever gem - Dynamic values

Ruby/Rails - 每当 gem - 循环 cron 任务

schedule.rb 中的配置文件与 Rails When gem?

推荐答案

Whenever 根本不需要或依赖 Rails,所以当它运行时,RAILS_ROOT 没有定义,但是因为whenever 的schedule.rb 一般保存在/config/schedule.rb,我们可以假设它在一个rails项目中,并像这样设置我们自己的RAILS_ROOT:

Whenever doesn't require or depend on Rails at all, so when it runs, RAILS_ROOT is not defined, however because whenever's schedule.rb is generally kept in /config/schedule.rb, we can make an assumption that it is in a rails project, and set our own RAILS_ROOT like this:

# in schedule.rb
RAILS_ROOT = File.dirname(__FILE__) + '/..'

如果您确实需要加载 Rails,请执行以下操作:

in the case that you actually need Rails loaded, do this:

# in schedule.rb
# this will require config/environment and load your entire rails environment
require File.expand_path(File.dirname(__FILE__) + "/environment")

这篇关于每当 gem schedule.rb 文件:不识别 RAILS_ROOT 变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆