Обычно я делаю это через отдельный демон обмена сообщениями, который загружает среду rails.
Так что очень упрощенный пример будет выглядеть в rails_root / script / myapp_daemon.rb:
#!/usr/bin/env ruby
require 'rubygems'
require 'amqp'
require 'daemons'
ENV["RAILS_ENV"] ||= "development"
require File.dirname(__FILE__) + "/../config/environment"
options = { :backtrace => true, :dir => '.', :log_output => true}
Daemons.run_proc('myapp_daemon', options) do
EventMachine.run do
connection = AMQP.connect(:host => "127.0.0.1")
channel = AMQP::Channel.new(connection)
queue = channel.queue("/myapp_daemon", :durable => true)
exchange = channel.direct("")
queue.subscribe do |payload|
obj = JSON.parse(payload)
#... handle messages here, utilize your rails models
Foo.create(...)
end
end
end
В вашем Gemfile вам также потребуются нужные драгоценные камни: amqp, daemons, eventmachine
Затем либо запустите его вручную вместе с приложением:
RAILS_ENV=development script/myapp_daemon.rb run
Или запустите его из одного из инициализаторов вашего приложения:
system('script/myapp_daemon.rb start')
Чтобы заглянуть в amqp, проверьте следующее, это даст хороший обзор высокого уровня:
http://www.rubyinside.com/why-rubyists-should-care-about-messaging-a-high-level-intro-5017.html
Это дает очень подробное объяснение с рабочими примерами:
http://rubydoc.info/github/ruby-amqp/amqp/master/file/docs/Exchanges.textile#Publishing_messages_as_immediate_
Наконец, посмотрите, выполняет ли Банни все, что вам нужно для клиента, это проще:
https://github.com/celldee/bunny/wiki/Using-Bunny
Надеюсь, это поможет