首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Distillery不替换systemd版本中的变量

Distillery不替换systemd版本中的变量
EN

Stack Overflow用户
提问于 2018-06-23 05:17:17
回答 1查看 303关注 0票数 0

在尝试使用Distillery在运行时获取系统变量时,我遇到了一个问题。目前,我已经这样定义了到数据库的连接:

代码语言:javascript
复制
config :myapp, MyApp.Repo,
  adapter: Ecto.Adapters.Postgres,
  timeout: 2000000,
    username: "${DB_USER}",
    password: "${DB_PASSWORD}",
    database:  "${DB_DATABASE}",
    hostname: "${DB_HOST}",
   port: 5432,
  pool_size: 10

然后,我运行phx.digest和mix release来获取我的tar文件。然后,我使用在我的ubuntu服务器上运行的systemd配置部署这个tar文件,该服务器设置了所有的环境变量。以下是systemd服务的重要行:

代码语言:javascript
复制
[Service]
Type=forking
WorkingDirectory=/opt/app
User=ubuntu
RemainAfterExit=yes
Restart=on-failure
RestartSec=5
Environment=MIX_ENV=stage "PORT=4000"
Environment=LANG=en_US.UTF-8
Environment=REPLACE_OS_VARS=true
EnvironmentFile=/etc/profile
ExecStart=/opt/app/bin/myapp migrate-start
ExecStop=/opt/app/bin/myapp stop
ExecReload=/opt/app/bin/myapp restart
SyslogIdentifier=myapp

当我尝试在服务器实例上运行此服务时。它正在尝试连接到${DB_HOST}:5432作为url,并且没有评估我不想用配置的值替换它。在使用硬编码的值之前,我已经成功地运行了这个,所以我知道问题出在替换这些值上。有没有人对我如何修复这个错误有什么建议?我在服务器上设置了所有必需的值,包括再次设置REPLACE_OS_VARS=true。

任何帮助或指导我们都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2018-07-04 10:00:25

REPLACE_OS_VARS设置是在构建时而不是运行时插入“普通”环境变量的帮助器。

这里的数据库配置值非常有用,因为您可能需要在应用程序启动时连接到数据库。限制是他们不能访问或获取运行tar的机器上的任何环境变量。

我通常会有一个.env文件,其中包含我在构建时需要的所有环境变量。

代码语言:javascript
复制
# .env contents

 export REPLACE_OS_VARS=true
 export DB_HOSTNAME="postgres"
...

那么发布-构建过程看起来就像这样:

代码语言:javascript
复制
$ MIX_ENV=prod
$ source .env
$ mix deps.get
$ mix deps.compile
$ mix phx.digest
$ mix release

这意味着您将需要使用REPLACE_OS_VARS=true注入的“环境”变量,这些变量在构建发行版的机器上都可用,而不是在接收构建的tar的机器上可用。或者使用其他配置管理解决方案。

这是我刚开始的时候帮助我的资源:https://hexdocs.pm/distillery/getting-started.html#application-configuration

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50995713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档