gpt4 book ai didi

ruby-on-rails-3 - 如何在 rails 中创建单例全局对象?

转载 作者:行者123 更新时间:2023-12-03 10:55:22 25 4
gpt4 key购买 nike

我有一个对象,我想创建一次并在我的模型之一中访问它。我把他放在哪里?恐怕如果我把他放在模型类文件中,每次我创建该模型的新实例时,他都会被创建。我只希望这个对象在启动时创建一次。这是对象:

require 'pubnub'    
publish_key = 'fdasfs'
subscribe_key = 'sdfsdsf'
secret_key = 'fsdfsd'
ssl_on = false

pubnub_obj = Pubnub.new(publish_key,
subscribe_key,
secret_key,
ssl_on)

我在模型中像这样使用他:
class Message < ActiveRecord::Base

def self.send_new_message_client(message)
message = { 'some_data' => message }
info = pubnub_obj.publish({
'channel' => 'testing',
'message' => message
})
puts(info)
end

end

最佳答案

在 Rails 中,每个请求都会重新创建对象。如果这是某种服务,它应该是请求范围内的单例。

单例对象应该使用 ruby​​ 单例 mixin 创建:

require 'singleton'

class Pubnub
include Singleton

def initialize(publish_key, subscribe_key, secret_key, ssl_on)
# ...
end

def publish
# ...
end
end

然后你可以用 instance 调用它方法:
Pubnub.instance.publish

这样你就可以确保这个对象实际上是一个单例(只存在一个实例)。

您可以将它安全地放入 models目录,虽然我经常更喜欢 lib目录或者为服务创建一个新目录。这取决于实际情况。

希望能帮助到你!

关于ruby-on-rails-3 - 如何在 rails 中创建单例全局对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10762246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com