我正在尝试完成以下任务:只要网站上的帖子获得批准,本网站上的人就会收到通知。
为了解决这个问题,我正在使用Faye,并在我的方法上的频道上发布批准。我的应用程序只有一个通道,非常简单。无论如何,由于某种原因,它无法正常工作。
我正在使用 Rails 2.3.5 , Faye 0.8.5 , eventmachine 1.0.0.beta4 (与Faye一起安装的那个) ,机架1.0.1 ,精简1.3.1 。我没有使用Apache。
到目前为止我所拥有的是:
faye.ru :(我用它来运行:rackup faye.ru -s thin -E production)
require 'faye'
faye_server = Faye::RackAdapter.new(:mount => '/faye', :timeout => 45)
run faye_server
的application.js :
var $j = jQuery.noConflict();
$j(function() {
var faye = new Faye.Client('http://0.0.0.0:9292/faye');
faye.subscribe("/messages/new", function(data) {
alert(data.text);
});
});
application.html.erb :
<%= javascript_include_tag 'http://0.0.0.0:9292/faye.js' %>
posts_controller.rb :
def approve
@post.update_attribute(:approved, true)
message = {:post => @post}
uri = URI.parse("http://0.0.0.0:9292/faye")
Net::HTTP.post_form(uri, :message => message.to_json)
redirect_to(pending_posts_path)
end
堆栈跟踪是:
EOFError (end of file reached):
/usr/lib/ruby/1.8/net/protocol.rb:135:in `sysread'
/usr/lib/ruby/1.8/net/protocol.rb:135:in `rbuf_fill'
/usr/lib/ruby/1.8/timeout.rb:62:in `timeout'
/usr/lib/ruby/1.8/timeout.rb:93:in `timeout'
/usr/lib/ruby/1.8/net/protocol.rb:134:in `rbuf_fill'
/usr/lib/ruby/1.8/net/protocol.rb:116:in `readuntil'
/usr/lib/ruby/1.8/net/protocol.rb:126:in `readline'
/usr/lib/ruby/1.8/net/http.rb:2024:in `read_status_line'
/usr/lib/ruby/1.8/net/http.rb:2013:in `read_new'
/usr/lib/ruby/1.8/net/http.rb:1050:in `request'
/usr/lib/ruby/1.8/net/http.rb:405:in `post_form'
/usr/lib/ruby/1.8/net/http.rb:543:in `start'
/usr/lib/ruby/1.8/net/http.rb:404:in `post_form'
app/controllers/posts_controller.rb:38:in `approve'
在瘦服务器上也会出现错误:
>> Thin web server (v1.3.1 codename Triple Espresso)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:9292, CTRL+C to stop
!! Unexpected error while processing request: undefined method `call' for nil:NilClass
据我所知,每当我尝试在服务器上连接时都会出现此错误,而关键是“http://0.0.0.0:9292/faye.js”不可用,即如果我尝试访问此URL,我收到“ !!处理请求时出现意外错误:nil:nilClass 未定义方法`call'”,这就是Net:HTTP无法访问它的原因。我想知道原因。
答案 0 :(得分:1)
不要输入<%= javascript_include_tag 'http://0.0.0.0:9292/faye.js' %>
它不完全是localhost,只是这样做:
<%= javascript_include_tag 'http://127.0.0.1:9292/faye.js' %>
答案 1 :(得分:0)
终于找到了问题,我的错,我忘了开始用服务器监听,在faye.ru上:
faye_server.listen(9292)