如何声明一个对象并使其在整个rails应用程序中可用?

时间:2011-10-14 09:00:37

标签: ruby-on-rails

我正在尝试定义与外部存储提供程序的连接。要打开连接,通常我会这样做

storage = Fog::Storage.new {lots more stuff here}

这意味着每次我想访问存储对象的地方都会在代码中放入非常秘密的凭据。 必须有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

如果您在config/initializers中的文件中定义常量,则该文件将在应用开始时为require d,并且该常量通常可用。例如:

<强>配置/初始化/ config.rb

Storage = Fog::Storage.new { stuff }

应用/模型/ mymodel.rb

do_something_with(Storage)

答案 1 :(得分:1)

有。创建fog.yml或其他内容,并将其放在config文件夹中(您将在版本控制中忽略此内容)。

然后设置凭据:

credentials: &credentials
  username: yourname
  password: yourpass

development:
  <<: *credentials

test:
  <<: *credentials

production:
  <<: *credentials

(我不使用雾,所以我真的不知道你需要什么信息)。然后创建一个新的初始值设定项文件fog.rb或其他内容,并将其放在config/initializers中。将其放入内部,以便在应用程序初始化时加载:

config = YAML.load_file("#{Rails.root}/config/fog.yml")[Rails.env]
FogStorage = Fog::Storage.new { config['username'], config['password'] }

然后您可以在任何地方使用全局FogStorage

同样,请确保忽略版本控制的凭据文件,并在部署中为其创建符号链接。