发布错误与Faye-Railsgem
Publish errors with the Faye-Rails gem
我正在使用 faye-rails gem 在我的前端 javascript 和我的 rails 服务器之间进行异步消息传递。我可以使用 curl 发送消息并让 javascript 打印它们,所以我知道 faye 服务器是 运行。我也可以像这样在服务器上收听消息:
# In application.rb
config.middleware.use FayeRails::Middleware, mount: '/bayeux', :timeout => 25 do
map '/async/**' => FayeController
map :default => :block
end
# In faye_controller.rb
class FayeController < FayeRails::Controller
channel '/async/test' do
subscribe do
puts "Received on channel #{channel}: #{message.inspect}"
end
end
end
然后我收到通过 curl -X POST localhost:3000/bayeux -H 'Content-Type: application/json' -d '{"channel": "/async/test", "data": "test123"}'
发送的消息并获得预期的输出。但是,我似乎无法从服务器内部发送消息。我希望这样的事情在订阅块中起作用(因此它会作为对任何消息的响应发送):
FayeController.publish '/async/test', :response => 'something'
但这会导致整个服务器崩溃并出现错误:
in '+': no implicit conversion of nil into Array (TypeError)
然后是堆栈跟踪。这是我的错吗?是我没有正确设置,还是误读了文档?或者它是 gem 中的错误,在这种情况下有人有解决方法吗?
由于底层 faye 库中的错误,我实际上已经不得不使用一种解决方法,请参阅 here。
您可以使用来自您服务器的 HTTP 请求(如 curl)发布到 faye 服务器
uri = URI.parse("http://localhost:3000/bayeux")
begin
Net::HTTP.post_form(uri, response: 'something')
rescue Errno::ECONNREFUSED
puts "Pushing to Faye Failed"
end
--------更新------------------------
前面的代码需要 运行 在另一个线程中以防止死锁(运行 它在后台作业中使用 resque
例如)
您可以使用以下内容在同一主题中发布
client = Faye::Client.new('http://localhost:3000/bayeux')
client.publish('/async/test', {response: "something"})
我正在使用 faye-rails gem 在我的前端 javascript 和我的 rails 服务器之间进行异步消息传递。我可以使用 curl 发送消息并让 javascript 打印它们,所以我知道 faye 服务器是 运行。我也可以像这样在服务器上收听消息:
# In application.rb
config.middleware.use FayeRails::Middleware, mount: '/bayeux', :timeout => 25 do
map '/async/**' => FayeController
map :default => :block
end
# In faye_controller.rb
class FayeController < FayeRails::Controller
channel '/async/test' do
subscribe do
puts "Received on channel #{channel}: #{message.inspect}"
end
end
end
然后我收到通过 curl -X POST localhost:3000/bayeux -H 'Content-Type: application/json' -d '{"channel": "/async/test", "data": "test123"}'
发送的消息并获得预期的输出。但是,我似乎无法从服务器内部发送消息。我希望这样的事情在订阅块中起作用(因此它会作为对任何消息的响应发送):
FayeController.publish '/async/test', :response => 'something'
但这会导致整个服务器崩溃并出现错误:
in '+': no implicit conversion of nil into Array (TypeError)
然后是堆栈跟踪。这是我的错吗?是我没有正确设置,还是误读了文档?或者它是 gem 中的错误,在这种情况下有人有解决方法吗?
由于底层 faye 库中的错误,我实际上已经不得不使用一种解决方法,请参阅 here。
您可以使用来自您服务器的 HTTP 请求(如 curl)发布到 faye 服务器
uri = URI.parse("http://localhost:3000/bayeux")
begin
Net::HTTP.post_form(uri, response: 'something')
rescue Errno::ECONNREFUSED
puts "Pushing to Faye Failed"
end
--------更新------------------------
前面的代码需要 运行 在另一个线程中以防止死锁(运行 它在后台作业中使用 resque
例如)
您可以使用以下内容在同一主题中发布
client = Faye::Client.new('http://localhost:3000/bayeux')
client.publish('/async/test', {response: "something"})