【问题标题】:creating application: failed to initialize ORM创建应用程序:无法初始化 ORM
【发布时间】:2021-06-15 12:48:48
【问题描述】:

我在启动节点时总是收到此错误。请回复我哪里出错了。

错误:创建应用程序:初始化 ORM 失败:initializeORM#NewORM:无法初始化 DB:无法打开 ?application_name=Chainlink+0.10.7+%7C+ORM+%7C+98d78e80-6fa0-4e2f- a9a4-c51199bf9d2a for gorm DB conn &{0 0xc0004a93e0 0 {0 0} [] map[] 0 0 0xc0005e29c0 false map[] map[] 0 0 0 0 0 0 0 0 0x59b0a0}:无法连接到主机=/var /run/postgresql user=root database=: server error (FATAL: unrecognized configuration parameter "?application_name" (SQLSTATE 42704))

配置:

LOG_LEVEL=debug
ETH_CHAIN_ID=42
MIN_OUTGOING_CONFIRMATIONS=2
LINK_CONTRACT_ADDRESS=0xa36085F69e2889c224210F603D836748e7dC0088
CHAINLINK_TLS_PORT=0
SECURE_COOKIES=false
FEATURE_EXTERNAL_INITIATORS=true
ALLOW_ORIGINS=*
ETH_URL=wss://kovan.infura.io/ws/v3/8e32345678ghjk456789cvbn4yu
DATABASE_URL=postgresql://localhost:5432/kovan_demo?sslmode=disable
DATABASE_TIMEOUT=0
FEATURE_FLUX_MONITOR=true
MINIMUM_CONTRACT_PAYMENT=100000000000000000
CHAINLINK_DEV=true

【问题讨论】:

    标签: chainlink


    【解决方案1】:

    问题在于你的配置变量DATABASE_URL的语法

    要连接到数据库,您需要一个专门创建的带有PASSWORDUSER,然后通过启动chainlink 节点来锁定该数据库。默认的postgres 用户将不起作用,因为它用于管理目的。 然后使用以下语法将这些凭据添加到环境变量中:DATABASE_URL=postgresql://$USERNAME:$PASSWORD@$SERVER:5432/$DATABASE

    因为您在环境中为postgresql server IP 设置了“localhost”,所以我假设您的 postgres 与 Chainlink 节点在同一主机上运行。建立连接有两种不同的方式:

    1) 您在 docker 容器中同时拥有 Chainlink 节点和 postgresql 服务器:

    您需要指向您的 postgresql 服务器的 container IDcontainer name,并在同一网络中创建两个容器。在这里可以找到docker的官方文档:https://docs.docker.com/network/bridge/

    这意味着您必须通过以下方式创建网络来桥接容器以便能够相互通信: docker network create $NAME

    然后将网络标志添加到 Chainlink 节点容器和 postgres-server 容器的运行命令: --network $NAME

    重新初始化所有这些容器后,您可以指向容器名称而不是 IP。您的环境中 DATABASE_URL 的语法现在看起来像这样: DATABASE_URL=postgresql://$USERNAME:$PASSWORD@$CONTAINER_NAME:$5432/$DATABASE

    除了重新初始化容器之外,您还可以将正在运行的 docker 容器连接到网络/用户定义的网桥: docker network connect $NETWORK_NAME $CONTAINER_NAME

    2) postgresql 服务器作为您主机上的应用程序和 docker 容器内的 chainlink 节点:

    要实现这一点,您需要配置 chainlink 节点和数据库以允许通信。

    postgresql 服务器:您需要更改配置文件以允许特定 Ip-range 的通信(默认情况下 postgres Ip-range 仅设置为 localhost )。通常你会在/etc/postgresql/<version>/main 目录中找到配置文件。

    1. 将 postgresql.conf 编辑为 listen_addresses = '*'
    2. 将 pg_hba.conf 编辑为 host all all 172.17.0.1/16 md5 此地址范围属于 Docker,包括您的 chainlink 容器的分配 IP。

    Chainlink 节点:您需要在运行命令中添加--add-host=host:127.0.0.1 以启用与主机上的数据库和服务的连接。

    请确保您通过将 ?ssl=disbable 添加到您的 ETH_URL 配置来禁用 ssl 以进行测试,因为如果您的服务器上未配置 SSL,Chainlink 节点将返回 [ERROR] 日志(您可以配置SSL 稍后在您的服务器上,因为这是您必须在官方文档中阅读的自己的主题)

    强烈建议在生产环境中使用 SSL(也适用于“仅”在内部加密您的流量),因为它可以简单地保护您的所有数据库通信并确保该数据库中的信息安全。

    【讨论】:

      猜你喜欢
      • 2011-03-06
      • 2013-03-10
      • 1970-01-01
      • 2011-03-30
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 2018-11-13
      相关资源
      最近更新 更多