Rails - 如何访问控制器中初始化程序中生成的数据
问题描述:
我在使用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
答
尝试在课堂上AWSProducts删除以下行
@@product_rewards = []
,并更改product_rewards方法类AWSProducts如下:
def product_rewards
@@product_rewards ||= []
end
您运行的是什么服务器? Webrick,客运,独角兽,瘦,彪马? – jmettraux
@jmettraux彪马 – BooBailey