标签: whenever

Rails cron随时,bundle:找不到命令

我试图使用每天执行rake任务onces一天.我得到这个错误

/bin/bash: bundle: command not found
/home/app/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find bundler (>= 0) amongst [minitest-1.6.0, rake-0.8.7, rdoc-2.5.8] (Gem::LoadError)
        from /home/app/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
        from /home/app/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb:1210:in `gem'
        from /home/app/.rvm/gems/ruby-1.9.2-p180/bin/bundle:18:in `<main>'
Run Code Online (Sandbox Code Playgroud)

这是我的crontab

# Begin Whenever generated tasks for: /home/af/www/app/releases/20120216172204/config/schedule.rb
PATH=/home/af/.rvm/gems/ruby-1.9.2-p180@global/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

0 0 * * * /bin/bash -l -c 'cd /home/af/www/app/releases/20120216172204 && rvm 1.9.1-p180; RAILS_ENV=production /home/af/.rvm/gems/ruby-1.9.2-p180/bin/bundle exec rake daily:stats --silent >> /home/af/www/app/releases/20120216172204/log/cron.log 2>&1'

# End Whenever generated tasks for: /home/af/www/app/releases/20120216172204/config/schedule.rb
Run Code Online (Sandbox Code Playgroud)

我不知道为什么它不起作用.如果我运行命令:

cd /home/af/www/app/releases/20120216172204 && rvm 1.9.1-p180; RAILS_ENV=production /home/af/.rvm/gems/ruby-1.9.2-p180/bin/bundle exec rake daily:stats --silent >> /home/af/www/app/releases/20120216172204/log/cron.log …
Run Code Online (Sandbox Code Playgroud)

cron ruby-on-rails whenever

45
推荐指数
3
解决办法
2万
查看次数

"每当"宝石在Heroku上运行cron工作

我创建了一个使用随时随地宝石的应用程序.宝石创造了cron工作.我让它在本地工作,但似乎无法让它在heroku雪松上工作.执行此操作的命令是什么?

运行:

heroku run whenever --update-crontab job1
Run Code Online (Sandbox Code Playgroud)

不起作用

ruby cron ruby-on-rails heroku whenever

41
推荐指数
2
解决办法
2万
查看次数

Rails,在开发中使用gem时使用

对不起快速问题来自相关的Rails新手.我正在尝试使用Whenever gem来安排一些rake任务.我不能为我的生活让它真正开始在我的开发机器上运行cron作业.

从其他stackoverflow线程来看,似乎我应该添加:

set :environment, "development"
Run Code Online (Sandbox Code Playgroud)

到我的schedule.rb文件.但那又怎样?

然后,一旦他们开始,我该如何停止cron工作?

在OSX中使用Rails 3.2.3

更新:答案是运行$ whenever -w将cron作业写入crontab文件.然后系统立即开始自动运行该crontab文件.

不幸的是,我的日志文件包含以下内容: "rake aborted! Don't know how to build task <task name>"

我想这可能是由于已知的crontab/rvm问题,但欢迎任何建议.

ruby-on-rails whenever

39
推荐指数
2
解决办法
2万
查看次数

无论什么时候Rails cron,设置环境

如果您了解创建cron作业的gem,那么这个问题可能才有意义.我的schedule.rb中有一项任务

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
Run Code Online (Sandbox Code Playgroud)

但是,当我使用更新我的crontab时

whenever --update-crontab appname --set environment=production
Run Code Online (Sandbox Code Playgroud)

cron作业仍然有RAILS_ENV =开发.我的生产和开发任务现在是一样的,我只需要改变环境变量,因为thinking_sphinx需要知道当前的环境.关于如何做到这一点的任何想法?

谢谢!

cron ruby-on-rails whenever

31
推荐指数
8
解决办法
4万
查看次数

Sidekiq Rails 4.2使用活动作业还是工作者?有什么不同

这是我第一次异步处理作业我在我的应用程序中实现Sidekiq进行后台处理.我会将它用于提醒电子邮件和应用内通知.我很困惑我是否应该使用Active Job创建一个发送电子邮件的工作或者Sidekiq Worker来发送电子邮件.他们似乎做同样的事情,Rails 4.2 Active Job似乎很新......它是否取代了对Sidekiq工作者的需求?

以下是使用Active Job作业和Sidekiq Worker发送邮件代码的相同内容.我正在使用Whenever gem进行调度.

my_mailers.rb

class MyMailers < ActionMailer::Base

  def some_mailer(r.user_id)
    @user = User.find(r.user_id)
    mailer_name = "ROUNDUP"
    @email = @user.email
    @subject ="subject text"
    mail(to: @email, 
      subject: @subject,  
      template_path: '/notifer_mailers', 
      template_name: 'hourly_roundup.html',
      )
  end
end
Run Code Online (Sandbox Code Playgroud)

使用Sidekiq"Worker"
some_worker.rb

class SomeWorker
  include Sidekiq::Worker

  def perform()
    @user = User.all
    @reminders = @user.reminders.select(:user_id).uniq.newmade
    @reminders.each do |r|
      MyMailers.some_mailer(r.user_id).deliver_later
    end
  end

end
Run Code Online (Sandbox Code Playgroud)

使用活动作业"作业"
some_job.rb

class SomeJob < ActiveJob::Base
  queue_as :mailer

  def perform()
    @user = User.all
    @reminders = @user.reminders.select(:user_id).uniq.newmade
    @reminders.each do |r| …
Run Code Online (Sandbox Code Playgroud)

asynchronous ruby-on-rails whenever sidekiq rails-activejob

30
推荐指数
3
解决办法
1万
查看次数

如何检测里面的Rails环境

这个问题可能只意义,如果你知道的,只要创业板创造的cron作业.

对于我的应用程序,我想whenever在所有环境中使用,包括测试开发.
schedule.rb看起来像这样:

set :output, {
    :error    => "#{path}/log/error.log",
    :standard => "#{path}/log/cron.log"
}

set :environment, Rails.env.to_sym
every 5.minutes do
  rake 'db:activity:synchronize'
end
Run Code Online (Sandbox Code Playgroud)

但它失败了Rails.env.to_sym(同样代表 RAILS_ENV):

/home/marius/.rvm/gems/ruby-1.9.2-p290@uxolo/gems/whenever-0.6.8/lib/whenever/job_list.rb:21:in `eval': uninitialized constant Whenever::JobList::Rails (NameError)
    from /home/marius/.rvm/gems/ruby-1.9.2-p290@uxolo/gems/whenever-0.6.8/lib/whenever/job_list.rb:21:in `eval'
    from /home/marius/.rvm/gems/ruby-1.9.2-p290@uxolo/gems/whenever-0.6.8/lib/whenever/job_list.rb:21:in `initialize'
    from /home/marius/.rvm/gems/ruby-1.9.2-p290@uxolo/gems/whenever-0.6.8/lib/whenever.rb:15:in `new'
    from /home/marius/.rvm/gems/ruby-1.9.2-p290@uxolo/gems/whenever-0.6.8/lib/whenever.rb:15:in `cron'
    from /home/marius/.rvm/gems/ruby-1.9.2-p290@uxolo/gems/whenever-0.6.8/lib/whenever/command_line.rb:41:in `run'
    from /home/marius/.rvm/gems/ruby-1.9.2-p290@uxolo/gems/whenever-0.6.8/lib/whenever/command_line.rb:8:in `execute'
    from /home/marius/.rvm/gems/ruby-1.9.2-p290@uxolo/gems/whenever-0.6.8/bin/whenever:38:in `<top (required)>'
    from /home/marius/.rvm/gems/ruby-1.9.2-p290@uxolo/bin/whenever:19:in `load'
    from /home/marius/.rvm/gems/ruby-1.9.2-p290@uxolo/bin/whenever:19:in `<main>'
Run Code Online (Sandbox Code Playgroud)

所以,我的问题基本归结为:

  1. 如何访问当前环境,
  2. 我该怎么做才能whenever在所有环境中使用?

cron rake ruby-on-rails whenever ruby-on-rails-3

20
推荐指数
4
解决办法
1万
查看次数

在cron中设置路径,以便它可以找到ruby

我的红宝石在/ usr/local/bin中.无论何时找不到它,并且在我的cron文件顶部设置PATH也不起作用,我认为因为无论何时在新的bash实例中运行命令.

# this does not work
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin

# Begin Whenever generated tasks for: foo
0 * * * * /bin/bash -l -c 'cd /srv/foo/releases/20110429110637 && script/rails runner -e production '\''ActiveRecord::SessionStore::Session.destroy_recent(15)'\'''

# End Whenever generated tasks for: foo

我怎么能告诉我的ruby二进制文件在哪里?从/ usr/bin创建一个符号链接对我来说似乎很混乱,但我想这可能是唯一的选择.

这个问题提供了env :PATH, "..."在schedule.rb作为一个解决方案,但(一)我无法找到该功能的任何文档中的文档(二)它似乎并没有已经解决了提问者的问题,任何地方(不幸的是它需要不平凡转机时间让我试试吧). 实际更新它在这个页面的底部,我现在就试试吧.

更多信息

  1. 我无法修改cron命令,因为它是由when生成的
  2. 我验证了如果我用一个新的bash shell bash -l,/ usr/bin/env发现ruby就好了
  3. 我刚刚在cron中尝试使用/ bin/bash中的确切命令,从该用户的命令行开始,它运行正常.

所以,这很神秘......

ruby bash cron sh whenever

17
推荐指数
1
解决办法
9691
查看次数

Cron的工作不在每当宝石工作

我有一个包含大量任务的应用程序,每天我都想运行一个cron作业,为数据库中的每个Task创建一个DayTask.任务has_many DayTasks和这些daytasks是用户每天将要检查的.我正在使用随时随地的宝石,但它似乎根本没有运行.有任何想法吗?

配置/ schedule.rb

every 1.day, :at => "12:01am" do
  runner "Task.generate_tasks_for_day"  
end
Run Code Online (Sandbox Code Playgroud)

Task.rb

  def generate_tasks_for_day
    Task.all.each do |task|
      task.day_tasks.create(:target_date => Date.today)
    end 
  end 
Run Code Online (Sandbox Code Playgroud)

运行'when命令'的结果

1 0 * * * /bin/bash -l -c 'cd /home/grant/rails_projects/GoalTwist && script/rails runner -e production '\''Task.generate_tasks_for_day'\'''
Run Code Online (Sandbox Code Playgroud)

注意:每次我想测试运行时,我一直在更改config/schedule.rb中的时间.

ruby cron ruby-on-rails whenever

17
推荐指数
2
解决办法
2万
查看次数

每当宝石和每隔n分钟安排一个工作从偏移开始

出于惊人的目的,我试图安排工作每2分钟一次,每5分钟一次.那就是我想要1个工作来运行1,6,11,16 ..而另一个工作要运行在2,7,12,17 ......

我找不到这样做的例子.所以我尝试过:

every 5.minutes, :at=> 1 do
 command "echo 'you can use raw cron sytax too'"
end 
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但所有':at'示例看起来都期待一个字符串格式的时间.以上是有效的,或者只是恰好工作,并且每个选项都不支持起始时间.

ruby gem whenever

16
推荐指数
2
解决办法
2万
查看次数

无论何时宝石:每个月20日

我在互联网上搜索了这个,文档并没有真正谈论具体的月度工作.所以我希望有人可以告诉我该怎么做.

我已经安装了随时随地的宝石,我需要知道的是正确的语法:

every :month, :on => '20th', :at => '02:00' do
  runner "Mailer.send_friend_sheet"
end
Run Code Online (Sandbox Code Playgroud)

希望有人能指出我正确的方向..

谢谢!

ruby-on-rails whenever

14
推荐指数
4
解决办法
8936
查看次数