1

クラスプロジェクトの Twitter チュートリアルに従っていますが、チュートリアルで PUBNUB を使用している部分で行き詰まっています。次のエラーが表示されます。

Showing C:/RubyProjects/twitter/app/views/layouts/application.html.erb where line #93 raised:

**wrong number of arguments(1 for 0)**

Extracted source (around line #93):

           PUBNUB.subscribe({
           channel  : "<%= Digest::SHA1.hexdigest(current_user.username, current_user.created_at) %>",
           callback : function(message) { updateTimeline(message) }

私はstackoverflowで見つけて、EventMachineが何人かの人々を助けたことを発見し、私はそれを試しましたが、それでも灘:(

Github の PUBNUB ページを確認したところ、チャネルコールバックの記述方法が変更されていることがわかったので、それを試してみましたが、どちらも役に立ちませんでした。引数の数が間違っているという同じエラーが引き続き発生します(0に対して1)。

Notify.rb

class Notify

  def self.deliver_message_to_user(params)
    post = Post.find(params[:post_id])
    user = User.find(params[:user_id])
    user.channel ||= Channel.new(
        :channel_ident =>
            Digest::SHA1.hexdigest(user.username, user.created_at.to_s))
    Pubnub.publish({
                       :channel => user.channel.channel_ident,
                       :message => post.to_json(:include => :user)
                   })
  end

end

application.html.erb

<script>

        function updateTimeline(message) {
            var html = JST['post'](jQuery.parseJSON(message));
            $('#timeline').prepend(html);
        }

        Pubnub.subscribe({
            :channel  => "<%= Digest::SHA1.hexdigest(current_user.username, current_user.created_at) %>",
        :callback => function(message) { updateTimeline(message) }
        })

    </script>

application.rb ファイルにrequire 'digest'を入れましたが、まだ役に立ちません。それは構文でしょうか?もしそうなら、正しい構文がどうなるかわかりません。

4

1 に答える 1

0

Ruby on Rails 4.0+ での PubNub メッセージの発行

PubNub Ruby README.md ファイルから次の詳細を取得しています - https://github.com/pubnub/ruby/blob/master/README.md

まず、Ruby の PubNub Gem から PubNub libを要求する必要があります。

## Require PubNub Gem
require 'pubnub'

## Instantiate a new PubNub instance.
pubnub = Pubnub.new(
    :publish_key   => 'demo', # publish_key only required if publishing.
    :subscribe_key => 'demo', # required
    :secret_key    => nil,    # optional, if used, message signing is enabled
    :cipher_key    => nil,    # optional, if used, encryption is enabled
    :ssl           => nil     # true or default is false
)

## Create a callback for checking response of Publish
@my_callback = lambda { |message| puts(message) }

## Execute Publish
pubnub.publish(
    :channel  => :hello_world,
    :message  => "hi",
    :callback => @my_callback
)

## Sometimes you need a sleep depending on your server type
sleep(1)
于 2013-09-25T17:52:53.820 に答える