增加修改测试Gunicorn的问题
This commit is contained in:
@@ -223,7 +223,8 @@ class GunicornTab(QWidget):
|
||||
"""根据config.json配置生成服务文件内容"""
|
||||
username = config.get('username', 'www-data')
|
||||
project_name = config.get('project_name', 'myproject')
|
||||
django_path = config.get('remote_directory', '/home/user')
|
||||
remote_directory = config.get('remote_directory', '/home/user')
|
||||
django_path = config.get('django_path', remote_directory)
|
||||
|
||||
# 构建完整的项目路径
|
||||
project_path = f"{django_path.rstrip('/')}"
|
||||
@@ -238,8 +239,8 @@ Group={username}
|
||||
WorkingDirectory={project_path}
|
||||
# 所有Gunicorn参数直接在这里配置
|
||||
ExecStart=/usr/local/bin/gunicorn \\
|
||||
--bind 127.0.0.1:8000 \\
|
||||
--workers $(nproc --all * 2 + 1) \\
|
||||
--bind 0.0.0.0:8000 \\
|
||||
--workers 3 \\
|
||||
--worker-class sync \\
|
||||
--timeout 60 \\
|
||||
--name {project_name} \\
|
||||
@@ -306,16 +307,20 @@ WantedBy=multi-user.target"""
|
||||
password = None
|
||||
if self.parent and hasattr(self.parent, 'server_connection_tab'):
|
||||
password = self.parent.server_connection_tab.password_input.text()
|
||||
logger.info(f"从server_connection_tab获取密码,长度: {len(password) if password else 0}")
|
||||
|
||||
# 如果密码为空,弹出密码输入对话框
|
||||
if not password:
|
||||
logger.info("密码为空,弹出密码输入对话框")
|
||||
dialog = PasswordDialog(self)
|
||||
if dialog.exec_() == QDialog.Accepted:
|
||||
password = dialog.get_password()
|
||||
logger.info(f"从对话框获取密码,长度: {len(password) if password else 0}")
|
||||
# 保存密码到服务器连接标签页
|
||||
if self.parent and hasattr(self.parent, 'server_connection_tab'):
|
||||
self.parent.server_connection_tab.password_input.setText(password)
|
||||
else:
|
||||
logger.warning("用户取消了密码输入")
|
||||
return None
|
||||
|
||||
return password
|
||||
@@ -355,6 +360,7 @@ WantedBy=multi-user.target"""
|
||||
logger.error(f"Gunicorn安装失败: {message}")
|
||||
|
||||
def test_gunicorn(self):
|
||||
"""测试Gunicorn配置"""
|
||||
if not self.check_ssh_connection():
|
||||
return
|
||||
|
||||
@@ -362,16 +368,26 @@ WantedBy=multi-user.target"""
|
||||
if not django_path:
|
||||
QMessageBox.warning(self, "警告", "请输入Django项目路径")
|
||||
return
|
||||
|
||||
# 获取端口配置
|
||||
port = self.port_input.text().strip() or "8000"
|
||||
|
||||
self.output_text.append(f"正在测试Gunicorn {django_path}...")
|
||||
# 记录测试参数
|
||||
logger.info(f"开始测试Gunicorn,Django路径: {django_path}, 端口: {port}")
|
||||
|
||||
self.output_text.append(f"正在测试Gunicorn {django_path} (端口: {port})...")
|
||||
self.test_gunicorn_btn.setEnabled(False)
|
||||
self.progress_bar.setVisible(True)
|
||||
self.progress_bar.setValue(0)
|
||||
|
||||
self.gunicorn_test_thread = GunicornTestThread(self.parent.ssh_client, django_path)
|
||||
logger.info("创建Gunicorn测试线程")
|
||||
# 注意:GunicornTestThread构造函数可能需要更新以接受端口参数
|
||||
# 确保测试时使用的端口与实际服务启动时一致
|
||||
self.gunicorn_test_thread = GunicornTestThread(self.parent.ssh_client, django_path, port)
|
||||
self.gunicorn_test_thread.progress_updated.connect(self.update_progress)
|
||||
self.gunicorn_test_thread.result_ready.connect(self.on_test_gunicorn_result)
|
||||
self.gunicorn_test_thread.start()
|
||||
logger.info("Gunicorn测试线程已启动")
|
||||
|
||||
def on_test_gunicorn_result(self, success, message):
|
||||
self.test_gunicorn_btn.setEnabled(True)
|
||||
@@ -444,6 +460,7 @@ WantedBy=multi-user.target"""
|
||||
# 使用gunicorn_[project_name].service格式作为服务名称
|
||||
service_name = f"gunicorn_{project_name}"
|
||||
|
||||
logger.info(f"正在执行服务 {action} 操作,服务名称: {service_name}")
|
||||
self.output_text.append(f"正在执行服务 {action} 操作...")
|
||||
|
||||
# 禁用所有服务管理按钮
|
||||
@@ -455,13 +472,20 @@ WantedBy=multi-user.target"""
|
||||
# 获取密码
|
||||
password = self.get_password()
|
||||
if password is None:
|
||||
logger.warning("未获取到密码,取消服务操作")
|
||||
for btn in buttons:
|
||||
btn.setEnabled(True)
|
||||
return
|
||||
|
||||
self.manage_thread = ManageGunicornServiceThread(self.parent.ssh_client, service_name, action, password)
|
||||
# 获取端口配置
|
||||
port = self.port_input.text().strip() or "8000"
|
||||
|
||||
logger.info(f"获取到密码,长度: {len(password)},创建ManageGunicornServiceThread线程")
|
||||
logger.info(f"开始管理Gunicorn服务 - 服务名: {service_name}, 操作: {action}, 端口: {port}")
|
||||
self.manage_thread = ManageGunicornServiceThread(self.parent.ssh_client, service_name, action, password, port)
|
||||
self.manage_thread.result_ready.connect(lambda s, m: self.on_manage_service_result(s, m, buttons))
|
||||
self.manage_thread.start()
|
||||
logger.info(f"Gunicorn服务管理线程已启动 - 操作: {action}")
|
||||
|
||||
def on_manage_service_result(self, success, message, buttons):
|
||||
# 重新启用所有服务管理按钮
|
||||
@@ -474,6 +498,10 @@ WantedBy=multi-user.target"""
|
||||
else:
|
||||
self.output_text.append(f"服务操作失败: {message}")
|
||||
logger.error(f"服务操作失败: {message}")
|
||||
# 如果是密码相关错误,提供更详细的提示
|
||||
if "password" in message.lower() or "sudo" in message.lower():
|
||||
self.output_text.append("提示:请检查sudo密码是否正确,或尝试重新输入密码")
|
||||
logger.warning("检测到可能的密码问题,提示用户重新输入密码")
|
||||
|
||||
def on_server_changed(self):
|
||||
self.load_gunicorn_config()
|
||||
|
||||
Reference in New Issue
Block a user