mirror of https://github.com/openspug/spug
A 添加manage.py update命令升级spug
parent
8b13a7eb80
commit
322f17eefb
|
@ -2,16 +2,53 @@
|
||||||
# Copyright: (c) <spug.dev@gmail.com>
|
# Copyright: (c) <spug.dev@gmail.com>
|
||||||
# Released under the MIT License.
|
# Released under the MIT License.
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
from django.core.management import execute_from_command_line
|
from django.core.management import call_command
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
import subprocess
|
||||||
|
import requests
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
help = '升级Spug版本'
|
help = '升级Spug版本'
|
||||||
|
|
||||||
def add_arguments(self, parser):
|
|
||||||
parser.add_argument('version', help='要升级的版本')
|
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
|
res = requests.get('https://gitee.com/api/v5/repos/openspug/spug/releases/latest').json()
|
||||||
|
version = res.get('tag_name')
|
||||||
|
if not version:
|
||||||
|
return self.stderr.write(self.style.ERROR('获取新版本失败,排除网络问题后可至官方论坛反馈'))
|
||||||
|
if version == settings.SPUG_VERSION:
|
||||||
|
return self.stdout.write(self.style.SUCCESS('当前已是最新版本'))
|
||||||
|
answer = input(f'发现新版本 {version} 是否更新[y|n]?')
|
||||||
|
if answer.lower() != 'y':
|
||||||
|
return
|
||||||
|
|
||||||
self.stdout.write(self.style.SUCCESS('升级成功'))
|
# update web
|
||||||
|
web_dir = os.path.join(settings.BASE_DIR, '../spug_web')
|
||||||
|
commands = [
|
||||||
|
f'curl -o /tmp/spug_web.tar.gz https://spug.dev/installer/web_{version}.tar.gz',
|
||||||
|
f'rm -rf {web_dir}/build',
|
||||||
|
f'tar xf /tmp/spug_web.tar.gz -C {web_dir}'
|
||||||
|
]
|
||||||
|
task = subprocess.Popen(' && '.join(commands), shell=True)
|
||||||
|
if task.wait() != 0:
|
||||||
|
return self.stderr.write(self.style.ERROR('获取更新失败,排除网络问题后可至官方论坛反馈。'))
|
||||||
|
|
||||||
|
# update api
|
||||||
|
commands = [
|
||||||
|
f'cd {settings.BASE_DIR}',
|
||||||
|
'git fetch --tags',
|
||||||
|
f'git checkout {version}'
|
||||||
|
]
|
||||||
|
task = subprocess.Popen(' && '.join(commands), shell=True)
|
||||||
|
if task.wait() != 0:
|
||||||
|
return self.stderr.write(self.style.ERROR('获取更新失败,排除网络问题后可至官方论坛反馈。'))
|
||||||
|
|
||||||
|
# update db
|
||||||
|
apps = [x.split('.')[-1] for x in settings.INSTALLED_APPS if x.startswith('apps.')]
|
||||||
|
call_command('makemigrations', *apps)
|
||||||
|
call_command('migrate')
|
||||||
|
|
||||||
|
self.stdout.write(self.style.SUCCESS('''升级成功,请自行重启服务,如果通过官方文档安装一般重启命令为
|
||||||
|
Centos: systemctl restart supervisord
|
||||||
|
Ubuntu: systemctl restart supervisor'''))
|
||||||
|
|
Loading…
Reference in New Issue