Django 模型保存不在守护进程模式下工作,但与 runserver 一起工作
Django model save not working in daemon mode but working with runserver
一旦用户添加他们的 github 存储库,我就会将 github 存储库保存到服务器,请参阅此模型。
class Repo(models.Model):
url = models.CharField(help_text='github repo cloneable',max_length=600)
def save(self, *args, **kwargs):
# os.system('git clone https://github.com/somegithubrepo.git')
os.system('git clone {}'.format(self.url))
super(Repo, self).save(*args, **kwargs)
在本地服务器和远程服务器(如 digitalOcean Droplet)中一切正常,当我添加 public github 回购时,克隆总是成功。
当我 运行 服务器像这样时它工作:python3 manage.py runserver 0.0.0.0:800
但是当我 运行 在 gunicorn 和 nginx 的守护进程模式下,它不起作用,
一切正常,甚至将数据保存在数据库中,只是它不是在守护进程模式下克隆,它有什么问题?
这是我的gunicorn.service
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/var/www/myproject
Environment="PATH=/root/.local/share/virtualenvs/myproject-9citYRnS/bin"
ExecStart=/usr/local/bin/pipenv run gunicorn --access-logfile - --workers 3 --bind unix:/var/www/myproject/config.sock -m 007 myproject.wsgi:application
[Install]
WantedBy=multi-user.target
再次注意,即使是 gunicorn,一切都在工作,数据正在保存在数据库中,只是它没有克隆 github 存储库,甚至没有触发任何错误。\
这有什么问题吗?谁能帮我解决这个问题?
在 systemd 单元文件中,您用 virtualenv 的路径覆盖 Environment
中 root 用户的 PATH
变量。因此 root 用户在 PATH
中没有通常的项目,例如/usr/bin
其中 git 命令通常存在。所以你需要使用git的绝对路径,例如/usr/bin/git
,或者将git的bin目录添加到PATH
,例如:
Environment="PATH=/usr/bin:/root/.local/share/virtualenvs/myproject-9citYRnS/bin"
一旦用户添加他们的 github 存储库,我就会将 github 存储库保存到服务器,请参阅此模型。
class Repo(models.Model):
url = models.CharField(help_text='github repo cloneable',max_length=600)
def save(self, *args, **kwargs):
# os.system('git clone https://github.com/somegithubrepo.git')
os.system('git clone {}'.format(self.url))
super(Repo, self).save(*args, **kwargs)
在本地服务器和远程服务器(如 digitalOcean Droplet)中一切正常,当我添加 public github 回购时,克隆总是成功。
当我 运行 服务器像这样时它工作:python3 manage.py runserver 0.0.0.0:800
但是当我 运行 在 gunicorn 和 nginx 的守护进程模式下,它不起作用,
一切正常,甚至将数据保存在数据库中,只是它不是在守护进程模式下克隆,它有什么问题?
这是我的gunicorn.service
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/var/www/myproject
Environment="PATH=/root/.local/share/virtualenvs/myproject-9citYRnS/bin"
ExecStart=/usr/local/bin/pipenv run gunicorn --access-logfile - --workers 3 --bind unix:/var/www/myproject/config.sock -m 007 myproject.wsgi:application
[Install]
WantedBy=multi-user.target
再次注意,即使是 gunicorn,一切都在工作,数据正在保存在数据库中,只是它没有克隆 github 存储库,甚至没有触发任何错误。\
这有什么问题吗?谁能帮我解决这个问题?
在 systemd 单元文件中,您用 virtualenv 的路径覆盖 Environment
中 root 用户的 PATH
变量。因此 root 用户在 PATH
中没有通常的项目,例如/usr/bin
其中 git 命令通常存在。所以你需要使用git的绝对路径,例如/usr/bin/git
,或者将git的bin目录添加到PATH
,例如:
Environment="PATH=/usr/bin:/root/.local/share/virtualenvs/myproject-9citYRnS/bin"