edeliver with distillery:如何设置“start”命令以使用 systemctl

edeliver with distillery: how to setup `start` command to use systemctl

我正在使用 edeliver backed up by distillery 将 Elixir 项目部署到远程。

我还成功地创建了 systemd.service 文件,用于启动、停止、重新启动等从命令行发布。

但是 mix edeliver start production 命令似乎 运行 绕过 systemd 的发布,通过普通的老好 bin/my_app start shell 命令。我想要的是始终使用 systemd,即使是热上传,因为它(与 upstart 不同)确实提供 reload 功能。

我找不到要使用 systemd 来[重新]启动版本的内容和对象。应该是delivery策略吗?还有别的吗?我知道这个问题不适合 SO,但我只是迷路了。

那么:我可以强制 edeliver 而不是 distillery 使用 systemd 来开始发布吗?如果是,如何?

FWIW,我将 post 放在这里。我用一个令人讨厌的kludge 解决了这个问题。我有一个 release.sh 脚本,其中包含几个后续的 builddeployping 命令。所以我做了以下事情:

# mix edeliver restart production

for host in `cat .deliver/config | grep PRODUCTION_HOSTS | cut -d '=' -f 2 | sed -e 's/"//g'`
do
  echo "Restarting the remote [$host]..."
  echo `ssh rates-injector@$host sudo systemctl restart rates_injector.service`
done
echo "Likely restarted."

基本上,我为 systemctl 手动发出 restart 命令,从 .deliver/config 文件中获取生产主机列表。