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
脚本,其中包含几个后续的 build
、deploy
和 ping
命令。所以我做了以下事情:
# 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
文件中获取生产主机列表。
我正在使用 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
脚本,其中包含几个后续的 build
、deploy
和 ping
命令。所以我做了以下事情:
# 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
文件中获取生产主机列表。