2011-11-02 11 views
9

En archivo schedule.rb, la declaración:cada vez que el archivo joya schedule.rb: no recongize RAILS_ROOT variable de

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 

Cuando trato de ejecutar el cmd siempre desde la terminal, consiguiendo el error siguiente:

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>' 

Estoy usando la declaración require para obtener los valores dinámicos del formulario para programar el trabajo. Por favor ayuda a resolver este problema?

Nota: He visto las siguientes consultas stackoverflow: How to detect Rails environment inside whenever

Siguiendo este hilo para obtener valores dinámicos, pero frente a un problema en esta requerir comunicado. Rails - Whenever gem - Dynamic values

Ruby/Rails - Whenever gem - Loop cron tasks

config file in schedule.rb with Rails Whenever gem?

Gracias, Sudhir C.N.

+0

Rails 3 desaprueba 'RAILS_ROOT' en favor de' Rails.root'. ¿Has probado eso todavía? – polarblau

+0

Rails.root también arroja el mismo error – sudhir

Respuesta

28

Siempre que no requiera o no dependa de Rails en absoluto, de modo que cuando se ejecuta, RAILS_ROOT no está definido, sin embargo, debido a que el schedule.rb de cada momento se guarda generalmente en /config/schedule.rb, podemos suponer que es en un proyecto de carriles, y establecer nuestra propia RAILS_ROOT así:

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

Editar: en el caso de que en realidad se necesita rieles cargado, hacer esto:

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

Un enfoque similar se describe aquí: http://groups.google.com/group/whenever-gem/browse_thread/thread/e745f2fb3db7cd49 – polarblau

+0

obtengo el ID de usuario y la contraseña de la base de datos desde el formulario , por lo tanto, para pasarlos al schedule.rb, necesito cargar el entorno de los carriles en schedule.rb. – sudhir

+0

@sudhir En ese caso, actualicé mi respuesta para realmente requerir e iniciar Rails. – Unixmonkey

18

el siempre desarrollador ya ha respondido a esta pregunta , mira esto https://github.com/javan/whenever/issues/81

Javan Siempre que ya no intente cargar su entorno Rails. Sin embargo, establece automáticamente una variable de ruta en el directorio siempre que se ejecute desde. Esto debería funcionar de la misma manera:

set :output, "#{path}/log/cron.log" 
+1

¡Gracias, mucho más limpio que la respuesta aceptada! – Toni

+1

Usted es bienvenido, sé que a veces es difícil encontrar una solución a un problema, pero cuando finalmente lo encuentro, me gusta compartirlo para ayudar a otros a ahorrar tiempo: D ... –

3

En Rails 4 tratar con:

require File.expand_path(File.dirname(__FILE__) + "/../config/environment") 

en su archivo schedule.rb. De esta manera también tiene acceso a todos los modelos e inicializadores de registro activo.

Cuestiones relacionadas