Git post-recieve hook 来运行 virtualenv、Django 和各种 python 脚本
Posted
技术标签:
【中文标题】Git post-recieve hook 来运行 virtualenv、Django 和各种 python 脚本【英文标题】:Git post-recieve hook to run virtualenv, Django & various python scripts 【发布时间】:2020-11-13 21:14:49 【问题描述】:我已经成功使用 Git post-receive hook
将文件从本地推送到服务器一段时间了,在我的 post-receive
文件中使用以下内容:
#!/bin/sh
git --work-tree=/home/myuser/myproject/app --git-dir=/home/myuser/myproject/myproject.git checkout -f
现在我还想启动虚拟环境,在使用post-receive
将文件推送到服务器后运行 Django manage.py 和各种 python 脚本。
基于其他question,我在我原来的post-receive
文件中添加了以下内容:
#!/bin/sh
git --work-tree=/home/myuser/myproject/app --git-dir=/home/myuser/myproject/myproject.git checkout -f
source /home/myuser/venv/bin/activate
python /home/myuser/myproject/manage.py makemigrations
python /home/myuser/myproject/manage.py migrate
python /home/myuser/myproject/app/python_script1.py
python /home/myuser/myproject/app/python_script1.py
sudo systemctl restart gunicorn
但似乎虚拟环境没有启动给我错误:
remote: hooks/post-receive: 4: hooks/post-receive: source: not found
此外,剩余的错误似乎与虚拟环境未启动有关。 manage.py
不执行并出现以下错误:
SyntaxError: invalid syntax
remote: File "/home/myuser/myproject/manage.py", line 16
remote: ) from exc
python 脚本似乎可以运行,但由于虚拟环境没有启动,它们没有找到模块。
路径、文件名等都是正确的。编辑添加:Django、python 脚本和虚拟环境成功独立运行,用户没有 sudo 密码权限,例如 user ALL = NOPASSWD: /bin/systemctl restart gunicorn
编辑添加:远程服务器是 Ubuntu 18
我的代码有什么明显错误或缺失的地方吗?
【问题讨论】:
【参考方案1】:结果证明解决方案非常简单。我只需要改变shebang。
来自:#!/bin/sh
收件人:#!/bin/bash
【讨论】:
以上是关于Git post-recieve hook 来运行 virtualenv、Django 和各种 python 脚本的主要内容,如果未能解决你的问题,请参考以下文章
sh 一个git pre commit hook,它使用gradle包装器运行测试任务
sh 一个git pre commit hook,它使用gradle包装器运行测试任务
sh 一个git pre commit hook,它使用gradle包装器运行测试任务