ruby-on-rails - 无法将数组分配给 .ENV 文件中的变量(rails 应用程序)

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

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

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

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

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

这行不通。当我为数据库播种时,不会创建此用户实例。请帮助。我看过关于“php”和“config”文件的内容,但没有明确详细说明如何实现这一点。

当我将我的应用程序推送到 Github 或 Heroku 时,我在 .env 中放入了我不想让它们可见的东西。所以请记住,我不希望 FOOD 数组对任何将部署/存储我的应用程序的公共(public)空间可见。谢谢。

最佳答案

我建议使用 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']

关于ruby-on-rails - 无法将数组分配给 .ENV 文件中的变量(rails 应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39715749/

相关文章:

javascript - 循环遍历数组并在到达末尾时返回到开头

php - 遍历数组并创建一个具有匹配参数名称的新数组

ruby-on-rails - 如何返回基于一天的 future 日期列表(例如,星期一到年底的日期)?

Ruby:使用散列访问实例方法

ruby-on-rails - Ruby:比较 2 个数组的匹配项,并计算匹配实例的数量

ruby-on-rails - 如何使用 AWS ECS 启用 tty 并运行交互式控制台?

ruby-on-rails - 尽管有更改,Rails仍使用缓存的application.css

ruby-on-rails - 如何将 ARRAY_TO_STRING 和 ARRAY_AGG 转换为 arel?

java - 用单个对象的克隆填充数组

ruby - 将 Ruby 脚本作为 Sinatra 的子进程/另一个线程运行的最佳方法是什么?