如何制作 rails 服务器范围的对象?

How to make a rails server wide object?

我正在使用RedditKit gem and in order to access certain elements, I need to send a request to reddit api to create a "client" object。以下是我目前的逻辑:

## application_controller
before_action :redditkit_login

private

def redditkit_login
  @client = RedditKit::Client.new ENV["reddit_username"], ENV["reddit_password"]
end

正如您在此处的逻辑中看到的那样,在每个请求之前,我随后创建了一个新的客户端对象,然后在任何地方都使用它。

我的问题是,我如何只创建一个客户端对象来处理来自任何地方的所有请求?

我这样做的动机是速度。对于对服务器的每个请求,我都会向 reddit 发出一个新请求,然后响应原始请求。我想让客户端对象随时可用。

你有很多选择。一个简单的方法是创建一个 config/initializers/reddit_client.rb 文件并放入其中:

  RedditClient = RedditKit::Client.new ENV.fetch("reddit_username"), ENV("reddit_password")

(注意我切换到 ENV.fetch 因为如果找不到密钥会出错,这会很有帮助)。

您也可以将文件重命名为 app/models/reddit_client.rb。虽然它不是真正的模型,但该文件夹也是自动加载的,因此它应该也能正常工作。