【问题标题】:Use environment variables in Rake task在 Rake 任务中使用环境变量
【发布时间】:2013-12-18 14:00:40
【问题描述】:
task :some_task, :environment do |t, args|
  puts Rails.env #=> development, production, etc
  puts ENV #=> {}
end

我设置了一些环境变量(通过本地 .env 或通过 Herokusan 通过 Heroku Config),例如要使用哪个 AWS 存储桶,我想在 rake 任务中引用它们,但 ENV 是一个空哈希。我知道由于:environment 任务依赖性和Rails.env 具有价值,与环境相关的事情已经完成,但我不清楚细节。

那么,如何在 Rake 任务中使用 ENV

【问题讨论】:

  • 你是如何运行这个任务的? ENV 是 Ruby 的核心内容,因此它应该始终反映您可用的环境变量。
  • $ rake some_task 在应用目录中。一些ENV.env 中,我可能需要为Heroku 做$ foreman run rake task
  • @Narfanator 你应该把这个作为一个实际的答案来回答,这样我就可以投票给你。做$ foreman run rake some_task是正确答案

标签: ruby-on-rails environment-variables rake-task


【解决方案1】:

两种好方法:

使用 Heroku 的“工头”工具。将所有环境变量放入.env

VAR=value

然后运行foreman run rake some_task

或者(而且,我推荐这种方式),使用“费加罗”宝石。将你的变量放入config/application.yml:

VAR: value

就是这样; rake some_task.

我推荐后者,因为rake figaro:heroku 会按照application.yml 中指定的方式提升您的环境

【讨论】:

  • 我知道这是一个老问题,但是将它们放在 .env 文件或 application.yml 中如何使您的密码/密钥远离代码库?我认为这是使用 ENV 变量的一个重要原因。是不是我们可以从 Rake 发出一些调用来获取它们?
  • 您(通常)不要将您的 application.yml 或 .env 检查到 repo 中;这就是我所说的“代码库”的意思,将它们直接放入主机的 ENV 会遇到它自己的问题。我的问题基本上要求我们可以从 Rake 打一些电话,但我没有找到。
  • 我公司更有经验的开发人员决定使用这种模式:config = YAML.load("application.yml"),但他们也决定不解释原因。 YMMV;我在某些情况下使用它(例如,sinatra),而不是在其他情况下(例如,rails)。
  • 很高兴知道。感谢更新。有时解决方法是您能做的最好的。
猜你喜欢
  • 2017-02-07
  • 1970-01-01
  • 2015-06-17
  • 2019-11-28
  • 2015-03-22
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多