2016-04-05 39 views
4

Ben heroku mesaj kuyrukları çalıştırmaya çalışıyorum. Bunun için RabbitMQ Bigwig eklentisini kullanıyorum.sneaker, heroku - almayan mesajlar almıyor RabbitMQ Bigwig

Bunny gem'i kullanarak ve sneakers gem ile mesaj almaya çalışırken iletileri yayınlıyorum. Bu kurulum yerel makinede sorunsuz bir şekilde çalışır. Bahsettiğim bağlama ile RabbitMQ yönetim eklenti bu kuyruk görmek mümkün duyuyorum

namespace :rabbitmq do 
    desc 'Setup routing' 
    task :setup_test_commands_queue do 
     require 'bunny' 

     conn = Bunny.new(ENV['SYNC_AMQP'], read_timeout: 10, heartbeat: 10) 
     conn.start 

     ch = conn.create_channel 

     # get or create exchange 
     x = ch.direct('testsync.pcc', :durable => true) 

     # get or create queue (note the durable setting) 
     queue = ch.queue('test.commands', :durable => true, :ack => true, :routing_key => 'test_cmd') 

     # bind queue to exchange 
     queue.bind(x, :routing_key => 'test_cmd') 

     conn.close 
    end 
    end 

:

Ben kurulum kuyruğunda ben kurulum sırasına sunucuda bu tırmık çalıştırmak

için aşağıdaki adımları uygulayın.

class TestPublisher 
    def self.publish(test) 
    x = channel.direct("testsync.pcc", :durable => true) 
    puts "publishing this = #{Test}" 
    x.publish(Test, :persistent => true, :routing_key => 'pcc_cmd') 
    end 

    def self.channel 
    @channel ||= connection.create_channel 
    end 

    def self.connection 
    @conn = Bunny.new(ENV['RABBITMQ_BIGWIG_TX_URL'], read_timeout: 10, heartbeat: 10) # getting configuration from rabbitmq.yml 
    @conn.start 
    end 
end 

İleti yayınlamak için TestPublisher.publish() yöntemini arıyorum.

require 'test_sync' 
class TestsWorker 
    include Sneakers::Worker 
    from_queue "test.commands", env: nil 

    def work(raw_event) 
    puts "^"*100 
    puts raw_event 
    # o = CaseNote.create!(content: raw_event, creator_id: 1) 
    # puts "#########{o}" 
    test = Oj.load raw_event 
    test.execute 
    # event_params = JSON.parse(raw_event) 
    # SomeWiseService.build.call(event_params) 
    ack! 
    end 
end 

Benim Procfile

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb 
worker: bundle exec rake jobs:work 
sneaker: WORKERS=TestsWorker bundle exec rake sneakers:run 

Benim Rakefile

require File.expand_path('../config/application', __FILE__) 
require 'rake/dsl_definition' 
require 'rake' 
require 'sneakers/tasks' 

Test::Application.load_tasks 

Benim sneaker yapılandırma

require 'sneakers' 
Sneakers.configure amqp: ENV['RABBITMQ_BIGWIG_RX_URL'], 
        log: "log/sneakers.log", 
        threads: 1, 
        workers: 1 

puts "configuring sneaker" 
:

böyle sneaker işçisi var 10

Bu iletinin yayınlandığından eminim. Rabbitmq yönetim eklentisi üzerine mesaj alabiliyorum. Ama spor ayakkabı çalışmıyor. Sneakers.log'da yardımcı olabilecek hiçbir şey yok. Heroku üzerinde

sneakers.log:

bu geç cevap için
# Logfile created on 2016-04-05 14:40:59 +0530 by logger.rb/41212 
+1

Bunu çözebildiniz mi? Aptalca bir şey: spor ayakkabı sürecine bir dyno atadın mı? Bunun dışında, gerçek konfigürasyon satırından önce "sneaker'u konfigüre etmek" koyar ve günlüklerde gösterilip gösterilmeyeceğini belirleyebilir misiniz? Ayrıca, heroku'ndaki girişiniz hangi dyno'dan geldiği hakkında bilgi içermemelidir? – draganstankovic

+0

Bu, gelecekte bazı kötü ruhlara yardımcı olabilir. Ben benzer bir şey yapıyordum ama 'cloud66', procfile değiştirmem gerekiyordu: sneaker: WORKERS = TestsWorker bundle exec rake sneakers: run 'to: sneaker: exec rune sneakers: WORKERS çalıştırmak = TestsWorker 'NOT - WORKERS env sonunda gelmeli – house9

cevap

1

üzgünüm. Bunu heroku üzerinde çalışabiliyordum. Bu hatayı saatlerce hata ayıklamasından sonra karşılaştığımda düzeltemedim. Bu yüzden yukarıdaki kodları yeniden yazdım ve önceki kodumda neyin yanlış olduğunu kontrol etmedim.

Bu koddaki tek sorun ve doğru kod sıra bağlamadır.

Aynı exchange'de iki kuyruk vardı. pcc_cmd yönlendirme anahtarı ve test.commands yönlendirme anahtarı ile pcc.commands yönlendirme anahtarı test_cmd.

I test_cmd ile çalışan, ancak aşağıdaki satıra gibi farklı sıraya (pcc.commands) yayınlayarak edildi

x.publish(Test, :persistent => true, :routing_key => 'pcc_cmd') 

TestPublisher içinde yapıldı. Bu nedenle, test.commands kuyruğunda mesajı alamadım. Sadece test.commands kuyruktan ileti getirilmeye TestWorker

from_queue "test.commands", env: nil 

Bu eyaletlerde

.

sneakers.log dosyayı ilgili olarak: Kurulum Üstü sneakers.log dosyada bana günlükleri vermek mümkün değildi. Evet, bu kurulum yerel geliştirme makinenizde çalışır, ancak heroku üzerinde çalışmıyordu. Şimdi bu tür hataları ayıklamak için yapılandırmadan log özniteliğimi yapıyorum. Böyle:

require 'sneakers' 
Sneakers.configure amqp: ENV['RABBITMQ_BIGWIG_RX_URL'], 
        # log: "log/sneakers.log", 
        threads: 1, 
        workers: 1 

komutunu heroku logs -a app_name --tail çalıştırarak görülebilir Heroku günlüklerinde sneaker günlükleri (hatta kalp atışı günlükleri) alacak Bu şekilde.