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 页面,发现它改变了通道回调的编写方式,所以我尝试这样做,但它也没有帮助。关于错误数量的参数(1 代表 0),我仍然遇到同样的错误。

通知.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

应用程序.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 库。

## 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 回答