0

私は次のタスクを達成しようとしています: サイトで投稿が承認されるとすぐに、このサイトのユーザーにそのことが通知されます。

これを解決するために、私は Faye を使用しており、承認方法でチャネルに公開しています。私のアプリケーションにはチャネルが 1 つしかなく、非常に単純なシナリオです。とにかく、何らかの理由でそれが機能していません。

Rails 2.3.5Faye 0.8.5eventmachine 1.0.0.beta4 (Faye とともにインストールされたもの)、rack 1.0.1、およびthin 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

アプリケーション.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 がアクセスできないのと同じ理由です。理由を知りたいです。

4

2 に答える 2

1

入力しないでください<%= javascript_include_tag 'http://0.0.0.0:9292/faye.js' %>

それは正確にはlocalhostではありません。

<%= javascript_include_tag 'http://127.0.0.1:9292/faye.js' %>

于 2012-05-31T13:40:22.283 に答える
0

最終的に問題が見つかりました。私のせいです。faye.ru でサーバーのリッスンを開始するのを忘れていました。

faye_server.listen(9292)
于 2012-06-04T19:05:15.997 に答える