You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Heroku PR App无法连接GrapheneDB问题排查求助

排查Heroku上GrapheneDB与Neo4j驱动连接握手失败的问题

看起来你已经做了不少基础排查,我再给你补充几个针对性的方向,应该能帮你定位问题:

1. 修正加密连接配置

你的驱动代码里设置了encrypted=False,但GrapheneDB在Heroku环境下的Bolt连接默认要求加密传输,非加密连接会被服务端直接关闭,这很可能是握手失败的核心原因。建议修改配置:

from django.conf import settings
from django.utils.functional import SimpleLazyObject
from neo4j.v1 import GraphDatabase, basic_auth, TRUST_ALL_CERTIFICATES  # 替换TRUST_ON_FIRST_USE

def get_driver():
    return GraphDatabase.driver(
        settings.NEO4J_BOLT_URL,
        auth=basic_auth(settings.NEO4J_USERNAME, settings.NEO4J_PASSWORD),
        encrypted=True,  # 开启加密
        trust=TRUST_ALL_CERTIFICATES,  # 信任Heroku环境下的证书
    )
driver = SimpleLazyObject(get_driver)

同时确认settings.NEO4J_BOLT_URL的前缀是bolt+s://(加密Bolt协议),而不是普通的bolt://。

2. 升级Neo4j驱动版本

你当前使用的neo4j-driver 1.5.3是2018年的旧版本,可能和GrapheneDB当前运行的Neo4j服务版本存在协议兼容性问题。建议升级到对应Neo4j版本的稳定驱动:

  • 如果GrapheneDB的Neo4j是4.x版本,升级驱动到neo4j==4.4.12(LTS版本)
  • 如果是5.x版本,升级到neo4j==5.12.0左右的稳定版
    升级后重新部署Heroku应用,测试连接是否恢复。

3. 验证Heroku出站IP是否在GrapheneDB白名单中

虽然nslookup能解析IP,但Heroku dyno的出站IP可能不在GrapheneDB的访问白名单里:

  1. 运行heroku run curl ifconfig.me获取当前dyno的出站IP
  2. 登录GrapheneDB控制台,找到对应数据库的"Security"设置,将获取到的IP添加到白名单中
  3. 重新测试连接

4. 用最小化脚本测试连接

去掉Django的Lazy封装,写一个简单的测试脚本直接在Heroku上运行,排除框架层面的干扰:

# test_connection.py
from neo4j.v1 import GraphDatabase, basic_auth, TRUST_ALL_CERTIFICATES

# 直接替换成你的GrapheneDB凭证
BOLT_URL = "bolt+s://your-graphenedb-host:port"
USERNAME = "your-username"
PASSWORD = "your-password"

try:
    driver = GraphDatabase.driver(
        BOLT_URL,
        auth=basic_auth(USERNAME, PASSWORD),
        encrypted=True,
        trust=TRUST_ALL_CERTIFICATES
    )
    with driver.session() as session:
        result = session.run("RETURN 1 AS test")
        print(f"连接成功!返回结果: {result.single()['test']}")
except Exception as e:
    print(f"连接失败,错误信息: {str(e)}")

运行heroku run python test_connection.py,查看输出的错误细节,可能会得到更明确的提示。

5. 查看GrapheneDB的服务端日志

登录GrapheneDB控制台,找到对应数据库的"Logs"页面,检查是否有关于连接拒绝的具体记录(比如认证失败、协议版本不支持、IP被拦截等),这能直接帮你定位服务端层面的问题。

内容的提问来源于stack exchange,提问作者Chad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:39:40