我们有一个连接到 Oracle 实例的小脚本。该脚本在我们的 resque worker 之外运行时可以正常工作。它甚至在控制台下运行良好。但是,当我们在 resque worker 中加载相同的脚本时,它会抛出
TNS:could not resolve the connect identifier specified
我们已经尝试了很多东西,但到目前为止没有任何效果。
resque worker 调用在根环境和控制台中工作的同一个类。
我们有一个连接到 Oracle 实例的小脚本。该脚本在我们的 resque worker 之外运行时可以正常工作。它甚至在控制台下运行良好。但是,当我们在 resque worker 中加载相同的脚本时,它会抛出
TNS:could not resolve the connect identifier specified
我们已经尝试了很多东西,但到目前为止没有任何效果。
resque worker 调用在根环境和控制台中工作的同一个类。
好吧,我对 Ruby 一无所知,因此,我并不完全了解您所采用的环境,但是,我确实了解 Oracle。
我可以告诉你,“TNS:无法解析指定的连接标识符”意味着 Oracle 无法解析连接标识符,即连接字符串,给定已设置的环境。
所以,一些事情要考虑:
在 resque worker 的执行环境中(抱歉,不知道那是什么),您需要适当设置 ORACLE_HOME 环境变量。Oracle 将在 $ORACLE_HOME/network/admin 中查找 tnsnames.ora、sqlnet.ora、ldap.ora 等,除非设置了 TNS_ADMIN。如果设置了 TNS_ADMIN,它将覆盖 $ORACLE_HOME/network/admin 位置。
同样,我不熟悉 Ruby 或“resque worker”是什么,所以,我只能说比较这两个环境,看看它们在哪里设置不同。
希望有帮助。
如果有人同时了解 Oracle 和 Ruby,也许他们可以提供更具体的建议。
再次,希望有帮助。
显然,resque 工作人员看不到 $TNS_ADMIN 所以我在 application.rb 中手动设置 ENV['TNS_ADMIN']