0

我有一个初始化程序twitter.rb

require 'twitter'

client = Twitter::REST::Client.new(
        {
          :consumer_key       => "",
          :consumer_secret    => "",
          :access_token       => "",
          :access_token_secret=> "",
        }       
    )

然后我希望能够在其他文件中访问这个“客户端”,比如一个名为 的模型tag.rb,我可以这样做:

    puts client
4

2 回答 2

4

仅供参考,这些凭据应该从您的初始化程序中移出并移到环境变量中,例如ENV['TWITTER_ACCESS_TOKEN']等。

关于在整个代码中访问客户端,您有几个选项。

  1. 将 Twitter 客户端存储在全局变量中。全局变量通常被认为是一个坏主意。$twitter_client = Twitter::REST::Client.new(...)

  2. 创建一个单例类。这可能不是线程安全的。

  3. 使用工厂模式在您需要时/在何处生成新客户端。例如,

app/services/twitter_api.rb

class TwitterAPI
  def client
    @client ||= Twitter::REST::Client.new do |config|
      config.key = ENV['VALUE'] # for each required credential
    end
  end
end

TwitterAPI.new.client.do_something()
于 2015-08-30T01:23:53.840 回答
0

我建议不要使用“客户”这个词,因为您将来可能需要其他人,这可能会造成混淆。但最终..你是如此接近。

初始化程序中的客户端代码已运行,但您无法访问它,因为它已本地化。您需要做的就是让您的客户端全局化,然后在需要时引用全局变量。

所以你的初始化程序变成:

$twitter_client = Twitter::REST::Client.new(
    {
      :consumer_key       => "",
      :consumer_secret    => "",
      :access_token       => "",
      :access_token_secret=> "",
    }       
 )

你对它的调用变成:

$twitter_client.search("#railsiscool")

不过请帮自己一个大忙,不要过度使用全局变量,它们在大多数 Rails 应用程序中几乎没有意义,并且可能会给您带来问题。

于 2015-08-30T01:22:24.423 回答