1

我正在使用rails「Shoryuken」gem,但我在開發環境中的隊列上驗證錯誤,當我在下面啓動rails服務器時出現錯誤: -shoryuken error to`validate_queues':指定的隊列

寶石/ shoryuken-2.0.11/LIB/shoryuken/environment_loader.rb:172:在`validate_queues':指定的隊列(S)[ 「development_worker」]不存在(引發ArgumentError)

我在下面使用設置: -

配置/ 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] 

初始化/ shoryuken.rb

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) 

我希望隊列應該是環境的具體。

回答

0

Ravindra,看着shoryuken的code,你得到的錯誤是因爲你沒有創建一個名爲development_worker的SQS隊列,這是否恰當?

您需要爲每個開發人員創建一個隊列,因爲shoryuken將在每個開發人員的計算機上運行。如果你不這樣做,每臺計算機的所有進程都將輪詢同一隊列的消息。 想象一下,有兩個shoryuken進程,分別對應於dev1和dev2機器,分別爲sh1sh2。 如果dev1向​​發送SQS味精,則sh2進程可以輪詢dev1發送的消息。

如果您希望避免在AWS中創建隊列,您可以查看this

+0

是的,我還沒有在AWS SQS上創建隊列「development_worker」。我試圖通過使用bundle exec Shoryuken sqs create development_worker來創建一個隊列,並且它運行良好,但是在開發環境中運行rails server之後,它通過相同的錯誤。你能幫我嗎我不熟悉Shoryuken,我用過sidekiq。 –

+0

您是否輸入[aws sqs](https://console.aws.amazon.com/sqs)並查看創建的隊列? – MatayoshiMariano

+0

在「aws sqs」創建隊列後,它工作正常,但我們的團隊不希望爲「aws sqs」中的每個開發者創建不同的2隊列。 –