将Rails Twitter Client初始化程序放在初始化程序中

时间:2015-08-30 00:13:59

标签: ruby-on-rails config twitter-gem

我有一个初始值设定项twitter.rb

require 'twitter'

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

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

    puts client

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

  4. 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()
    

答案 1 :(得分:0)

我建议不要使用“客户端”这个词,因为将来可能需要其他人,这可能会令人困惑。但最终......你非常接近。

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

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

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

你对它的召唤变成了:

$twitter_client.search("#railsiscool")

请为自己做一个巨大的帮助但不要过度使用全局变量,它们在大多数rails应用程序中都没有多大意义,可能会给你带来麻烦。