Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails中的应用程序启动时,在heroku上安排一次重新创建作业_Ruby On Rails_Heroku_Ruby On Rails 4_Resque_Resque Scheduler - Fatal编程技术网

Ruby on rails 在Rails中的应用程序启动时,在heroku上安排一次重新创建作业

Ruby on rails 在Rails中的应用程序启动时,在heroku上安排一次重新创建作业,ruby-on-rails,heroku,ruby-on-rails-4,resque,resque-scheduler,Ruby On Rails,Heroku,Ruby On Rails 4,Resque,Resque Scheduler,我正在使用Resque和Resque Schedule启动一个作业,该作业必须在应用程序启动时立即运行。其他计划作业每30秒加载一次 这是我的config/initializers/redis.rb的代码 require 'rake' require 'resque' require 'resque/server' require 'resque_scheduler/tasks' # This will make the tabs show up. require 'resque_schedul

我正在使用Resque和Resque Schedule启动一个作业,该作业必须在应用程序启动时立即运行。其他计划作业每30秒加载一次

这是我的config/initializers/redis.rb的代码

require 'rake'
require 'resque'
require 'resque/server'
require 'resque_scheduler/tasks'
# This will make the tabs show up.
require 'resque_scheduler'
require 'resque_scheduler/server'

uri = URI.parse(ENV["REDISTOGO_URL"])
REDIS = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
Resque.redis = REDIS
Dir["#{Rails.root}/app/workers/*.rb"].each { |file| require file }
Resque.enqueue(AllMessageRetriever)
Resque.schedule = YAML.load_file(Rails.root.join('config', 'schedule.yml'))
当应用程序启动时,AllMessageRetriever将运行2-3次,而不是仅运行一次。初始化者是否多次被呼叫?这在Heroku和我当地的环境中都会发生

是否可以在Resque Scheduler中设置一个仅在运行时立即执行一次的延迟作业

AllMessageRetriever的代码。基本上,它在表上循环并调用外部API来获取数据,然后将其更新到表中。如果在初始值设定项文件中添加enqueue方法,整个任务将发生2-3次

 require 'socialcast'
module AllMessageRetriever
    @queue = :message_queue
    def self.perform()
        Watchedgroup.all.each do |group|    
            puts "Running group #{group.name}"
            continueLoading=true
            page=1
            per_page=500
            while(continueLoading == true)
                User.first.refresh_token_if_expired
                token = User.first.token
                puts "ContinueLoading: #{continueLoading}"
                @test = Socialcast.get_all_messages(group.name,token,page,per_page)

                messagesArray =  ActiveSupport::JSON.decode(@test)["messages"]
                puts "Message Count: #{messagesArray.count}"
                if messagesArray.count == 0
                    puts 'count is zero now'
                    continueLoading = false
                else
                    messagesArray.each do |message|
                        if not Message.exists?(message["id"])   
                            Message.create_with_socialcast(message, group.id)
                        else
                            Message.update_with_socialcast(message)
                        end
                    end
                end
                page += 1
            end
            Resqueaudit.create({:watchedgroup_id => group.id,:timecompleted => DateTime.now})
        end
        # Do anything here, like access models, etc
        puts "Doing my job"
    end
end
Rake

首先,为什么要尝试在init上排队

你最好授权给一个由初始值设定项调用的

这将消除对初始化过程的依赖,这将使事情变得更清楚。我不会把它放在初始值设定项中,因为它会在其他地方得到更好的处理()


问题

我认为这一行导致了问题:

Resque.enqueue(AllMessageRetriever)
在没有看到
AllMessageRetriever
的内容的情况下,我猜测您是
AllMessageRetriever
(模块/类?)将返回结果2/3次,导致Resque将(2/3次)数据集添加到队列中

可能是错误的,但这是有意义的,这意味着您的问题不在于
Resque
/
初始值设定项,而在于
AllMessageRetriever


如果你能表现出来,那将是一个很大的帮助

Hi@RichPeck我为worker类添加了代码。我现在已经将它添加到Rake任务中,它工作得很好。i、 只有一次。但唯一的问题是我必须手动调用任务,而不是自动调用这是个好消息——也许你可以为任务创建一个初始值设定项?比如
#config/initializers/messages.rb Rake::Task[“your:Task”]。调用