Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.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 shoryuken“验证”队列的错误';:指定的队列_Ruby On Rails_Amazon Web Services_Ruby On Rails 5_Ruby 2.3.1_Shoryuken - Fatal编程技术网

Ruby on rails shoryuken“验证”队列的错误';:指定的队列

Ruby on rails shoryuken“验证”队列的错误';:指定的队列,ruby-on-rails,amazon-web-services,ruby-on-rails-5,ruby-2.3.1,shoryuken,Ruby On Rails,Amazon Web Services,Ruby On Rails 5,Ruby 2.3.1,Shoryuken,我使用的是rails“Shoryuken”gem,但在启动rails服务器时,我在开发环境中的队列上进行验证时遇到错误,错误如下:- gems/shoryuken-2.0.11/lib/shoryuken/environment_loader.rb:172:“验证队列”中:指定的队列[“开发工作人员”]不存在(ArgumentError) 我使用了以下设置:- config/shoryuken.yml aws: access_key_id: <%= ENV["SQS_IAM"] %&g

我使用的是rails“Shoryuken”gem,但在启动rails服务器时,我在开发环境中的队列上进行验证时遇到错误,错误如下:-

gems/shoryuken-2.0.11/lib/shoryuken/environment_loader.rb:172:“验证队列”中:指定的队列[“开发工作人员”]不存在(ArgumentError)

我使用了以下设置:-

config/shoryuken.yml

aws:
  access_key_id: <%= ENV["SQS_IAM"] %>
  secret_access_key: <%= ENV["SQS_IAM_SECRET"] %>
  region: <%= ENV["SQS_IAM_REGION"] %>
concurrency: 25  # The number of allocated threads to process messages. Default 25
delay: 0         # The delay in seconds to pause a queue when it's empty. Default 0
queues:
  - ["<%= Rails.env %>_worker", 1]
我希望队列应该是特定于环境的。

Ravindra,查看shoryuken的队列,您得到了错误,因为您没有创建名为
development\u worker
的SQS队列,对吗

您需要为每个开发人员创建一个队列,因为shoryuken将在每个开发人员的计算机上运行。如果不这样做,每台计算机的所有shoryuken进程将轮询同一队列的消息。 假设有两个shoryuken进程,
sh1
sh2
,分别对应于dev1和dev2机器。 如果dev1向
dev队列
发送SQS消息,
sh2
进程可以轮询dev1发送的消息

如果您希望避免在AWS中创建队列,您可以查看。

Ravindra,查看shoryuken的队列,您得到了错误,因为您没有创建名为
开发工人
的SQS队列,对吗

您需要为每个开发人员创建一个队列,因为shoryuken将在每个开发人员的计算机上运行。如果不这样做,每台计算机的所有shoryuken进程将轮询同一队列的消息。 假设有两个shoryuken进程,
sh1
sh2
,分别对应于dev1和dev2机器。 如果dev1向
dev队列
发送SQS消息,
sh2
进程可以轮询dev1发送的消息


如果您希望避免在AWS中创建队列,可以查看。

是的,我没有在AWS SQS中创建队列“开发工人”。我尝试使用bundle exec Shoryuken sqs create development_worker创建一个队列,它运行得很好,但在开发环境中运行rails服务器之后,出现了相同的错误。我不熟悉Shoryuken,我使用了sidekiq。你进入并查看创建的队列了吗?在“aws sqs”创建队列后,它工作正常,但我们的团队不希望在“aws sqs”为每个开发人员创建不同的-2队列。@RavindraYadav我已经更新了关于你问题的答案。如果您没有aws或开发人员对应的IAM用户的相同密钥,则仍然可能发生错误。如果您使用Rails Active Job,在开发中可以使用内联适配器,它不需要Shoryuken或SQS队列,然后您可以仅为生产配置Shoryuken适配器。如果您想在开发中使用Shoryuken,我建议为每个开发人员创建队列
ENV['USER']
可能是一个很好的前缀。SQS不按队列收费,而是按请求收费。如果您想在开发中使用Shoryuken,请使用多个队列。是的,我没有在AWS SQS中创建队列“development_worker”。我尝试使用bundle exec Shoryuken sqs create development_worker创建一个队列,它运行得很好,但在开发环境中运行rails服务器之后,出现了相同的错误。我不熟悉Shoryuken,我使用了sidekiq。你进入并查看创建的队列了吗?在“aws sqs”创建队列后,它工作正常,但我们的团队不希望在“aws sqs”为每个开发人员创建不同的-2队列。@RavindraYadav我已经更新了关于你问题的答案。如果您没有aws或开发人员对应的IAM用户的相同密钥,则仍然可能发生错误。如果您使用Rails Active Job,在开发中可以使用内联适配器,它不需要Shoryuken或SQS队列,然后您可以仅为生产配置Shoryuken适配器。如果您想在开发中使用Shoryuken,我建议为每个开发人员创建队列
ENV['USER']
可能是一个很好的前缀。SQS不按队列收费,而是按请求收费。如果您想在开发中使用Shoryuken,可以使用多个队列。
def parse_config(config_file)
  if File.exist?(config_file)
    YAML.load(ERB.new(IO.read(config_file)).result)
  else
    raise ArgumentError, "Config file #{config_file} does not exist"
  end
end

config = parse_config([Dir.pwd, 'config/shoryuken.yml'].join('/')).deep_symbolize_keys
Shoryuken::EnvironmentLoader.load(config)