2

正在研究使用 IronWorker 来运行一些常见服务,但是我想知道是否有一种方法可以在 worker 本身中知道它在什么环境下运行。例如,在我们的主代码库中,我们将服务器 var ENV 设置为“开发”、“暂存”或“生产”之一。基于这个变量,我们的应用程序知道要加载哪些配置文件(通过 dirs config/development、config/staging 和 config/production 中的配置文件)。我想为工人设置类似的设置。

我注意到,当我通过 cli 上传工作人员时,我可以执行以下操作:

iron_worker 上传workers/example/hello_world --env staging

这允许我拥有一个 Iron.json 配置文件,其中包含 dev、staging 和 production 密钥。例如,

{
  "production": {
    "token": "AAAAAAAAAAAAAAAAAAAAAAAAAAA",
    "project_id": "000000000000000000000001"
  },
  "staging": {
    "token": "BBBBBBBBBBBBBBBBBBBBBBBBBB",
    "project_id": "000000000000000000000002"
  },
  "development": {
    "token": "CCCCCCCCCCCCCCCCCCCCCCCCCC",
    "project_id": "000000000000000000000003"
  },
  "test": {
    "token": "DDDDDDDDDDDDDDDDDDDDDDDDDD",
    "project_id": "000000000000000000000004"
  }
}

但是,在工作人员本身中,我无法从 cli 访问 env var,因此当工作人员需要加载某些配置变量时,它不知道要查看哪个目录。

在此处的文档中http://dev.iron.io/worker/reference/dotworker/他们表明您可以在 .worker 文件中设置一个环境变量,但这意味着我需要为每个环境有一个单独的工作文件并且(也许?)根据我部署到的环境将它们换掉。

4

1 回答 1

4

有一些棘手的方法:

1)铁.json。与描述的格式相同,没有变化

2) .worker 文件。将环境从本地系统传递到 IronWorker 环境。将此行添加到 .worker 文件:

set_env 'IRON_ENV', ENV['IRON_ENV']

3) 上传代码命令。代替

iron_worker upload workers/example/hello_world --env staging

使用不同的语法:

IRON_ENV=staging iron_worker upload workers/example/hello_world

4) 检查 Worker 端的环境(当然支持任何语言选择):

puts ENV['IRON_ENV']
于 2014-12-19T15:49:28.447 回答