我有一个初始值设定项twitter.rb
:
require 'twitter'
client = Twitter::REST::Client.new(
{
:consumer_key => "",
:consumer_secret => "",
:access_token => "",
:access_token_secret=> "",
}
)
然后我希望能够在其他文件中访问此“客户端”,例如,名为tag.rb
的模型,我可以这样做:
puts client
答案 0 :(得分:3)
仅供参考,我们应将这些凭据移出初始化程序并转移到环境变量中,例如ENV['TWITTER_ACCESS_TOKEN']
等。
关于在整个代码中访问客户端,您有几个选项。
将Twitter客户端存储在全局变量中。全局变量通常被认为是一个坏主意。 $twitter_client = Twitter::REST::Client.new(...)
创建一个单例类。这可能不会是线程安全的。
使用工厂模式在您需要的时间/地点生成新客户端。例如,
在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应用程序中都没有多大意义,可能会给你带来麻烦。