Rails - 如何从控制器访问初始值设定项中生成的数据



我有一个 Ruby on rails 应用程序,我在其中使用 AWS Products API。 此 API 有一个限制。 所以我使用 rufus 调度器 gem 设置了一个调度程序,每秒查询一次 api,n 次。 我将调度程序放在初始值设定项中,因为我想尽快获取数据。 但是我正在努力从控制器成功访问数据。 我设置了一个单例类,其中包含一个类变量以及getter和setter。它在本地完美运行。 但是当我在我的产品中运行它时,类变量是空的。 (我尝试使用实例变量,但在二传器中为零( 我很茫然,可以使用一些帮助。

这是我的代码:

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

调度程序.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 Elastic Beanstalk上并通过eb cli进行部署

尝试删除类中的以下行 AWSProducts

@@product_rewards = []

并在类AWSP产品中更改product_rewards方法,如下所示:

def product_rewards
@@product_rewards ||= []
end

最新更新