-1

我在使用AWS Products API的Rails應用程序中有ruby。這個API有一個節流閥。所以我設置了一個使用rufus調度程序gem的調度程序來每秒鐘查詢api n次。我將調度程序放入初始化程序中,因爲我想盡快獲取數據。但我努力成功地從控制器訪問數據。我設置了一個帶有類變量的單例類,併爲它設置了getter和setter。它在當地完美運作。但是當它在我的產品中運行時,類變量是空的。 (我嘗試了一個實例變量,但在setter中獲得了零)我迷失了方向並且可以使用一些幫助。Rails - 如何訪問控制器中初始化程序中生成的數據

這裏是我的代碼:

aws_products.rb

require 'singleton' 
require 'asin' 

class AWSProducts 
    include Singleton 
    include ASIN::Client 

    @@product_rewards = [] 

    def product_rewards 
     @@product_rewards 
    end 
    def add_product_rewards(array) 
     unless array.nil? 
      @@product_rewards.concat array 
     end 
    end 

    def get_aws_products (keywords, page) 
     ... 
    end 
end 

scheduler.rb

require 'rufus-scheduler' 
require 'aws_products' 

scheduler = Rufus::Scheduler.singleton 
@aws = AWSProducts.instance 

product_count = 0 

scheduler.every '1s', :blocking => true do |job| 
    if product_count <= 5 
     @aws.add_product_rewards(@aws.get_aws_products('Best Sellers', product_count)) 
     product_count += 1 
    else 
     job.unschedule 
    end 
end 

application_controller.rb

require 'aws_products' 
class ApplicationController < ActionController::Base 
    def popular_products 
     blacklist = Blacklist.all 
     logger.info AWSProducts.instance.product_rewards.inspect 
     @items = AWSProducts.instance.product_rewards.select{ |item| !blacklist.any?{ |o| item[:id].to_s == o.identifer } } 
    end 
end 

編輯:我主持的AWS彈性是anstalk和部署通過EB CLI

+0

您運行的是什麼服務器? Webrick,客運,獨角獸,瘦,彪馬? – jmettraux

+0

@jmettraux彪馬 – BooBailey

回答

2

嘗試在課堂上AWSProducts刪除以下行

@@product_rewards = [] 

,並更改product_rewards方法類AWSProducts如下:

def product_rewards 
    @@product_rewards ||= [] 
end 
相關問題