tutorial rufus rails mac job create ruby-on-rails cron whenever

ruby on rails - rufus - Rails cron siempre, configurando el entorno



sidekiq crontab (9)

Esta pregunta probablemente solo tenga sentido si conoce la gema "always" para crear trabajos cron. Tengo una tarea en mi schedule.rb como

every 1.day, :at => ''4am'' do command "cd #{RAILS_ROOT} && rake thinking_sphinx:stop RAILS_ENV=#{RAILS_ENV}" command "cd #{RAILS_ROOT} && rake thinking_sphinx:index RAILS_ENV=#{RAILS_ENV}" command "cd #{RAILS_ROOT} && rake thinking_sphinx:start RAILS_ENV=#{RAILS_ENV}" end

Sin embargo, cuando actualizo mi crontab usando

whenever --update-crontab appname --set environment=production

los trabajos cron todavía tienen RAILS_ENV = desarrollo. Mis tareas de producción y desarrollo son las mismas ahora, solo necesito cambiar la variable de entorno porque thinking_sphinx necesita conocer el entorno actual. ¿Alguna idea sobre cómo hacer esto?

¡Gracias!


Último siempre que permita una fácil integración de Capistrano. Puede agregar lo siguiente a deploy.rb:

set :whenever_environment, defer { stage } set :whenever_identifier, defer { "#{application}-#{stage}" } require "whenever/capistrano"


Agregue la siguiente línea de código en la parte superior de config / schedule.rb.

ENV[''RAILS_ENV''] = "#{@pre_set_variables[:environment]}"

y actualiza el crontab usando el siguiente comando.

whenever --update-crontab pvcnxt --set ''environment=production''

y luego reiniciar crontab usando el comando

service crond restart

¡Eso es!

Final config / schedule.rb se ve de esta manera

ENV[''RAILS_ENV''] = "#{@pre_set_variables[:environment]}" env :PATH, ENV[''PATH''] require File.expand_path(File.dirname(__FILE__) + "/environment") set :output, "#{Rails.root}/logs/cron_log_#{ENV[''RAILS_ENV'']}.log" every 1.day, :at => ''00:00 am'' do command "cd #{Rails.root}/lib/tasks && rake clean__posts_table_rake" end


Algo más que quieras probar si estás usando bundler y capistrano.

En su archivo deploy.rb, cuando configure el comando: whenever_mand, NO simplemente haga esto:

set :whenever_command, "bundle exec whenever"

En cambio, haz esto:

set(:whenever_command) { "RAILS_ENV=#{rails_env} bundle exec whenever" }

Ahora, la variable de entorno RAILS_ENV estará disponible cuando se cargue el archivo schedule.rb, de modo que en schedule.rb ahora puede hacer esto:

set :environment, ENV[''RAILS_ENV'']

Voila! Usted está listo para ir.


Consideraría usar el atajo "rake" para que sea aún más limpio:

every 1.day, :at => ''4am'' do rake "thinking_sphinx:stop" rake "thinking_sphinx:index" rake "thinking_sphinx:start" end


Estas preguntas han estado abiertas por mucho tiempo, así que pensé en compartir qué funcionaba cada vez que 0.9.7, Ruby 2.4.0 y RAILS 5.0.1. En la respuesta mencionada anteriormente hay muchos intentos cercanos, pero el error de sintaxis los ataca. Debajo está lo que funcionó y es un enfoque muy simple.

schedule.rb

require File.expand_path(File.dirname(__FILE__) + ''/environment'') set :output, {:standard => ''log/cron_log.log'', :error => ''log/cron_error_log.log''} env :PATH, ENV[''PATH''] every :day, :at => ''10am'' do rake "somejob:run", :environment => @environment end

Actualiza el crontab (dev)

whenever --set ''environment=development'' --update-crontab

Resultados (dev)

0 10 * * * / bin / bash -l -c ''cd / my / rails / app && RAILS_ENV = paquete de desarrollo exec rake somejob: run --silent >> log / cron_log.log 2 >> log / cron_error_log.log''

Actualiza el crontab (prod)

whenever --set ''environment=production'' --update-crontab

Resultados (prod)

0 10 * * * / bin / bash -l -c ''cd / my / rails / app && RAILS_ENV = paquete de producción exec rake somejob: run --silent >> log / cron_log.log 2 >> log / cron_error_log.log''

Espero que esto pueda ayudar a alguien. Feliz Codificando esto!


No escriba la variable RAILS_ENV. Debería configurarlo automáticamente.

every 1.day, :at => ''4am'' do command "cd #{RAILS_ROOT} && rake thinking_sphinx:stop" command "cd #{RAILS_ROOT} && rake thinking_sphinx:index" command "cd #{RAILS_ROOT} && rake thinking_sphinx:start" end

Funciona en mi aplicación:

every 4.days do runner "AnotherModel.prune_old_records" end $ whenever --set environment=production 0 0 1,5,9,13,17,21,25,29 * * /Users/weppos/Sites/git/app/script/runner -e production "AnotherModel.prune_old_records" $ whenever --set environment=development 0 0 1,5,9,13,17,21,25,29 * * /Users/weppos/Sites/git/app/script/runner -e development "AnotherModel.prune_old_records"


Para Whenever (0.9.2)

Use la variable @environment para verificar el entorno:

case @environment when ''production'' every 1.minutes do rake "user:take_sample" end when ''development'' every 1.minutes do rake "user:dev_sample" end end


Siempre que no detecte su entorno, solo utiliza la producción de manera predeterminada. Puede establecer el entorno para todos los trabajos usando set:

set :environment, ''staging''

O por trabajo:

every 2.hours do runner ''My.runner'', :environment => ''staging'' end


Tenga cuidado si quiere pasar más de un parametro a cada momento.
Tienes que hacerlo así:

whenever --update-crontab appname --set ''environment=production&cron_log=/path/to/log''