start_with_redis_check.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #!/usr/bin/env python
  2. """
  3. 启动应用前检查Redis连接
  4. 如果Redis不可用,会给出相应的提示和解决方案
  5. """
  6. import os
  7. import sys
  8. import subprocess
  9. # 添加项目根目录到路径
  10. sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
  11. def check_redis():
  12. """检查Redis是否可用"""
  13. try:
  14. import redis
  15. # 测试连接
  16. broker_url = os.environ.get('CELERY_BROKER_URL', 'redis://localhost:6379/0')
  17. r = redis.from_url(broker_url)
  18. r.ping()
  19. return True
  20. except:
  21. return False
  22. def show_redis_help():
  23. """显示Redis安装和启动帮助"""
  24. print("\n" + "="*60)
  25. print("🔧 Redis 设置指南")
  26. print("="*60)
  27. print("\n📋 快速解决方案:")
  28. print("\n1️⃣ Windows用户 - 使用Chocolatey安装Redis:")
  29. print(" choco install redis-64")
  30. print(" redis-server --service-install")
  31. print(" redis-server --service-start")
  32. print("\n2️⃣ 使用Docker运行Redis:")
  33. print(" docker run -d --name redis -p 6379:6379 redis:alpine")
  34. print("\n3️⃣ Linux/macOS用户:")
  35. print(" # Ubuntu/Debian")
  36. print(" sudo apt-get install redis-server")
  37. print(" sudo systemctl start redis-server")
  38. print(" ")
  39. print(" # macOS (Homebrew)")
  40. print(" brew install redis")
  41. print(" brew services start redis")
  42. print("\n4️⃣ 手动下载Redis (Windows):")
  43. print(" 下载: https://github.com/microsoftarchive/redis/releases")
  44. print(" 解压后运行: redis-server.exe")
  45. print("\n✅ 验证Redis运行:")
  46. print(" redis-cli ping")
  47. print(" (应该返回: PONG)")
  48. print("\n🔄 重新测试连接:")
  49. print(" python test_redis.py")
  50. print("\n📖 详细说明:")
  51. print(" 查看 REDIS_SETUP.md 文件")
  52. print("="*60)
  53. def start_app():
  54. """启动Flask应用"""
  55. print("\n🚀 启动Flask应用...")
  56. try:
  57. # 启动Flask应用
  58. from app import create_app
  59. app = create_app()
  60. print("✅ Flask应用启动成功!")
  61. print("📍 访问地址: http://localhost:5000")
  62. print("🔄 任务队列: Mock模式 (Redis不可用时自动启用)")
  63. print("\n按 Ctrl+C 停止应用")
  64. app.run(host='0.0.0.0', port=5000, debug=True)
  65. except KeyboardInterrupt:
  66. print("\n👋 应用已停止")
  67. except Exception as e:
  68. print(f"\n❌ 应用启动失败: {e}")
  69. def main():
  70. """主函数"""
  71. print("🔍 检查Redis连接...")
  72. if check_redis():
  73. print("✅ Redis连接正常")
  74. print("🎯 建议启动Celery Worker以获得最佳性能:")
  75. print(" celery -A app.celery_app worker --loglevel=info")
  76. print(" (在新的终端窗口中运行)")
  77. start_app()
  78. else:
  79. print("⚠️ Redis连接失败")
  80. print("🔄 应用将使用Mock模式运行 (功能受限)")
  81. response = input("\n是否查看Redis安装指南? (y/n): ").lower().strip()
  82. if response in ['y', 'yes', '是']:
  83. show_redis_help()
  84. response = input("\n是否继续启动应用? (y/n): ").lower().strip()
  85. if response in ['y', 'yes', '是']:
  86. start_app()
  87. else:
  88. print("👋 已取消启动")
  89. else:
  90. start_app()
  91. if __name__ == '__main__':
  92. main()