【问题标题】:Can't assign an array to a variable in an .ENV file (rails app)无法将数组分配给 .ENV 文件中的变量(rails 应用程序)
【发布时间】:2017-02-04 13:25:28
【问题描述】:

我想创建一个数组并将其分配给 .env 文件中的变量,如下所示:

FOOD=["cookies", "grapes", "cake", "pie"]

然后,在单独的seed.rb 文件中,创建一个对象实例,如下例所示,并使用“FOOD”数组定义我的对象的属性:

User.create(name: "jane doe", favorite_foods: ENV["FOOD"])

这不起作用。当我为数据库播种时,不会创建此 User 实例。请帮忙。我见过有关“php”和“config”文件的东西,但没有明确详细说明如何实现这一点。

当我将应用推送到 Github 或 Heroku 时,我在 .env 中放入了我不希望显示的内容。所以请记住,我不希望 FOOD 数组对任何将部署/存储我的应用程序的公共空间可见。谢谢。

【问题讨论】:

    标签: ruby-on-rails arrays ruby environment-variables environment


    【解决方案1】:

    您需要安装 dotenv gem 才能加载 .env 环境变量。

    https://github.com/bkeepers/dotenv

    【讨论】:

      【解决方案2】:

      我建议使用 Foreman 或 Dotenv 从 .env 文件加载环境变量。按照https://github.com/bkeepers/dotenv 上的 Rails 安装说明进行操作。

      这里有一个问题:据我所知,您不能将数组直接存储为环境变量。你可以做的——这是我在大多数应用程序中所做的——使用逗号分隔的字符串,并在 Ruby 中处理它。

      例如:

      # .env
      FOOD=cookies,grapes,cake,pie
      
      # seeds.rb
      User.create!(
        name: "Jane Doe",
        favorite_foods: ENV.fetch('FOOD').split(',')
      )
      

      这会将逗号分隔的字符串拆分为一个数组,并在赋值中使用它。

      使用.create! 方法(使用!)可以帮助您调试未创建实例的原因,因为它会立即返回验证错误等。

      另外,在这里使用#fetch 将确保环境变量存在,如果不存在则会抛出错误。

      如果您希望应用在缺少该环境变量的情况下回退到默认列表,您也可以使用:

      ENV.fetch('FOOD', 'default,food,list').split(',')
      #=> ['default', 'food', 'list']
      

      【讨论】:

      • 这成功了!谢谢马特!我已经在使用“dotenv”gem,但我在那里有一个数组。这种使其成为逗号分隔的字符串,然后将其拆分为我的 seed.rb 文件中的数组的方法有效!!
      • 我有一个问题。活动存储中的 storage.yml 可以看到 .env 中的环境变量吗?
      猜你喜欢
      • 2016-04-15
      • 1970-01-01
      • 2015-11-21
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多