配置具有多个值的变量

时间:2014-10-15 17:49:09

标签: ruby-on-rails heroku

在我的Rails应用程序中,我有一项功能,我只想打开使用某个电子邮件登录的用户(我们使用Devise进行用户身份验证)。我有一种方法来检查用户是否current_user.is_privileged?

def is_privileged?
 Settings.privileged_users.include?(email)
end 

config/settings/test.yml中,我将特权用户设置为:

privileged_users: ['chesa@example.com', 'random@example.com']

另一方面,在生产中,我正在考虑使用配置变量,如:

#config/settings.yml
privileged_users: ENV["PRIVILEGED_USERS"]

我的问题是我是否可以在数组中为该变量设置多个值?我正在将我的应用部署到Heroku。

3 个答案:

答案 0 :(得分:2)

您可以将数组作为字符串传入,YAML应该正确解析它。

因此,您的设置将保持不变,您的env变量将为:

PRIVILEGED_USERS="['chesa@example.com', 'random@example.com']"

答案 1 :(得分:2)

通常,设置文件应该真正用于真正的静态或配置数据。您确定不希望在您的用户模型上有privileged标记,只是将此信息存储在数据库中吗?然后,您不必重新部署代码只是为了更改该列表中的人员:

class AddPrivilegedFlagToUsers < ActiveRecord::Migration
  def up ; add_column :users, :privileged, :boolean, :default => false ; end
  def down ; remove_column :users, :privileged
end

然后你的检查就是:

if current_user.privileged?  
  # do stuff
end

答案 2 :(得分:0)

最初的问题是env变量是否可以是一个数组。答案是否定的,而不是Heroku,因为https://github.com/railsconfig/rails_config状态涉及heroku部分中的数组: 然而,#34;它不会使用数组。&#34;。我们ended up将多个值存储为字符串并将它们分开。谢谢Rene

ENV['PRIVILEGED_USERS'] = "one@example.com, two@example.com"

def is_privileged?
 Settings.privileged_users.split(',').include?(email)
end