max1949 commited on
Commit
a9d7df7
·
verified ·
1 Parent(s): 96621b9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -10
app.py CHANGED
@@ -31,28 +31,69 @@ logging.basicConfig(
31
  logger = logging.getLogger("BK_GTA_ARCHITECT")
32
 
33
  # ==============================================================================
34
- # 0.5 [HuggingFace 专用] DNS 稳定性修复
35
  # ==============================================================================
36
  def fix_dns():
37
  """
38
- HuggingFace Spaces 容器默认 DNS 解析器不稳定。
39
- 注入 Google (8.8.8.8) Cloudflare (1.1.1.1) 作为备用 DNS。
40
- Replit 环境无此问题,此为 HuggingFace 迁移专用适配。
41
  """
 
42
  try:
43
  with open('/etc/resolv.conf', 'r') as f:
44
  current = f.read()
45
  if '8.8.8.8' not in current:
46
  with open('/etc/resolv.conf', 'a') as f:
47
  f.write('\nnameserver 8.8.8.8\nnameserver 1.1.1.1\n')
48
- logger.info("✅ [DNS] Injected Google & Cloudflare DNS servers.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  else:
50
- logger.info(" [DNS] Reliable DNS servers already present.")
51
- except PermissionError:
52
- os.environ['RES_OPTIONS'] = 'timeout:3 attempts:5'
53
- logger.warning("⚠️ [DNS] resolv.conf read-only. Set RES_OPTIONS fallback.")
54
  except Exception as e:
55
- logger.warning(f"⚠️ [DNS] Fix attempt failed: {e}")
56
 
57
  fix_dns()
58
 
 
31
  logger = logging.getLogger("BK_GTA_ARCHITECT")
32
 
33
  # ==============================================================================
34
+ # 0.5 [HuggingFace 专用] DNS 稳定性修复 (增强版)
35
  # ==============================================================================
36
  def fix_dns():
37
  """
38
+ HuggingFace Spaces 容器 DNS 解析器无法解析 discord.com。
39
+ 方案: 用 dnspython 通过 Google DNS (8.8.8.8) 直接查询 IP,
40
+ 然后写入 /etc/hosts 完全绕过容器的 DNS。
41
  """
42
+ # 第一步:尝试注入 resolv.conf 备用 DNS
43
  try:
44
  with open('/etc/resolv.conf', 'r') as f:
45
  current = f.read()
46
  if '8.8.8.8' not in current:
47
  with open('/etc/resolv.conf', 'a') as f:
48
  f.write('\nnameserver 8.8.8.8\nnameserver 1.1.1.1\n')
49
+ logger.info("✅ [DNS] Injected backup DNS to resolv.conf.")
50
+ except Exception as e:
51
+ logger.warning(f"⚠️ [DNS] resolv.conf write failed: {e}")
52
+
53
+ # 第二步(核心):用 dnspython 解析并写入 /etc/hosts
54
+ hosts_to_resolve = [
55
+ 'discord.com',
56
+ 'gateway.discord.gg',
57
+ 'cdn.discordapp.com',
58
+ 'api.discord.com',
59
+ ]
60
+
61
+ try:
62
+ import dns.resolver
63
+
64
+ resolver = dns.resolver.Resolver(configure=False)
65
+ resolver.nameservers = ['8.8.8.8', '1.1.1.1', '8.8.4.4']
66
+ resolver.timeout = 10
67
+ resolver.lifetime = 10
68
+
69
+ hosts_lines = []
70
+ for hostname in hosts_to_resolve:
71
+ try:
72
+ answers = resolver.resolve(hostname, 'A')
73
+ ip = answers[0].to_text()
74
+ hosts_lines.append(f"{ip} {hostname}")
75
+ logger.info(f"✅ [DNS] Resolved {hostname} → {ip}")
76
+ except Exception as e:
77
+ logger.warning(f"⚠️ [DNS] Failed to resolve {hostname}: {e}")
78
+
79
+ if hosts_lines:
80
+ try:
81
+ with open('/etc/hosts', 'a') as f:
82
+ f.write('\n# BK-GTA Discord DNS Fix\n')
83
+ for line in hosts_lines:
84
+ f.write(line + '\n')
85
+ logger.info(f"✅ [DNS] Wrote {len(hosts_lines)} entries to /etc/hosts.")
86
+ except PermissionError:
87
+ logger.warning("⚠️ [DNS] /etc/hosts is read-only.")
88
+ except Exception as e:
89
+ logger.warning(f"⚠️ [DNS] hosts write error: {e}")
90
  else:
91
+ logger.error(" [DNS] Could not resolve any Discord hosts.")
92
+
93
+ except ImportError:
94
+ logger.warning("⚠️ [DNS] dnspython not installed, skipping hosts injection.")
95
  except Exception as e:
96
+ logger.error(f" [DNS] Resolution failed: {e}")
97
 
98
  fix_dns()
99