1

を実行する ruby filename.rbと、シンWebサーバーが起動しますが、localhost:4567で(Sinatra)アプリケーションを表示しようとすると、このエラーメッセージが表示されます。グーグルで調べても何もわかりませんでした。誰かが私がこれを乗り越えるために何をするかもしれないか知っていますか?

gems/eventmachine-0.12.10/lib/em/connection.rb:39:in `block in new': undefined method `associate_callback_target' for #<Thin::Connection:0x00000100fc7500> (NoMethodError)
    from /Users/michaeljohnmitchell/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/eventmachine-0.12.10/lib/em/connection.rb:36:in `instance_eval'
    from /Users/michaeljohnmitchell/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/eventmachine-0.12.10/lib/em/connection.rb:36:in `new'
    from /Users/michaeljohnmitchell/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/eventmachine-0.12.10/lib/eventmachine.rb:1430:in `event_callback'
    from /Users/michaeljohnmitchell/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/eventmachine-0.12.10/lib/pr_eventmachine.rb:815:in `block in eventable_read'
    from /Users/michaeljohnmitchell/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/eventmachine-0.12.10/lib/pr_eventmachine.rb:812:in `times'
    from /Users/michaeljohnmitchell/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/eventmachine-0.12.10/lib/pr_eventmachine.rb:812:in `eventable_read'
    from /Users/michaeljohnmitchell/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/eventmachine-0.12.10/lib/pr_eventmachine.rb:369:in `block in crank_selectables'
    from /Users/michaeljohnmitchell/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/eventmachine-0.12.10/lib/pr_eventmachine.rb:369:in `each'
    from /Users/michaeljohnmitchell/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/eventmachine-0.12.10/lib/pr_eventmachine.rb:369:in `crank_selectables'
    from /Users/michaeljohnmitchell/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/eventmachine-0.12.10/lib/pr_eventmachine.rb:324:in `block in run'
    from /Users/michaeljohnmitchell/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/eventmachine-0.12.10/lib/pr_eventmachine.rb:318:in `loop'
    from /Users/michaeljohnmitchell/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/eventmachine-0.12.10/lib/pr_eventmachine.rb:318:in `run'
    from /Users/michaeljohnmitchell/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/eventmachine-0.12.10/lib/pr_eventmachine.rb:64:in `run_machine'
    from /Users/michaeljohnmitchell/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run'
    from /Users/michaeljohnmitchell/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/thin-1.4.1/lib/thin/backends/base.rb:63:in `start'
    from /Users/michaeljohnmitchell/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/thin-1.4.1/lib/thin/server.rb:159:in `start'
    from /Users/mm/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/rack-1.4.1/lib/rack/handler/thin.rb:13:in `run'
    from /Users/mm/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/sinatra-1.3.3/lib/sinatra/base.rb:1350:in `run!'
    from /Users/mm/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/sinatra-1.3.3/lib/sinatra/main.rb:25:in `block in <module:Sinatra>'

このコードは、Rubyでのインターネットアプリケーションのクローン作成という本からのものです。それはそのデモアプリケーションのそれぞれで起こっています...

ルートコード

get '/' do haml :index end

post '/' do
  uri = URI::parse(params[:original])
  custom = params[:custom].empty? ? nil : params[:custom]
  raise "Invalid URL" unless uri.kind_of? URI::HTTP or uri.kind_of? URI::HTTPS
  @link = Link.shorten(params[:original], custom) 
  haml :index
end

['/info/:short_url', '/info/:short_url/:num_of_days', '/info/:short_url/:num_of_days/:map'].each do |path|
  get path do
    @link = Link.first(:identifier => params[:short_url])
    raise 'This link is not defined yet' unless @link
    @num_of_days = (params[:num_of_days] || 15).to_i
    @count_days_bar = Visit.count_days_bar(params[:short_url], @num_of_days)
    chart = Visit.count_country_chart(params[:short_url], params[:map] || 'world')
    @count_country_map = chart[:map]
    @count_country_bar = chart[:bar]
    haml :info
  end
end

get '/:short_url' do 
  link = Link.first(:identifier => params[:short_url])
  link.visits << Visit.create(:ip => get_remote_ip(env))
  link.save
  redirect link.url.original, 301
end

error do haml :index end

def get_remote_ip(env)
  if addr = env['HTTP_X_FORWARDED_FOR']
    addr.split(',').first.strip
  else
    env['REMOTE_ADDR']
  end
end
4

2 に答える 2

1

私はRubyの本でインターネットアプリケーションのクローンを作成しています。GitHubリポジトリでコードを実行してみましたが、いくつかの変更(Sinatraでの変更による)を除けば、正常に実行できます。おそらく、Prakash Murthyの回答を試して、EventMachine 1.0.0にアップグレードすることもできますが、私はあなたと同じバージョン(0.12.10)を実行しているので、問題はありません。

あなたが私に直接メールを送ってくれれば、私たちはこれを理解することができます(そして後でStackOverflowを更新します)。

于 2012-10-05T06:15:31.357 に答える
0

Ruby1.9.2を使用してこの問題が発生しました。Eventmachineの両方のバージョン(0.12.10および1.0.x)でこの問題が発生しました。リンクされたGithubの問題のヒントに従って、Ruby2.1.1に切り替えて再バンドルしました。Eventmachine 1.0.3をインストールし、問題は解決しました。

(これには、MacをMavericksに更新し、多くの廃止されたライブラリを吹き飛ばし、XcodeとHomebrewを再インストールするなど、多くのヤクの剃毛が含まれていました。他の人にとってはもっと簡単だといいのですが。)

于 2014-06-16T16:04:39.667 に答える