我正在开发一个连接到Oracle数据库的Rails站点,虽然我没有从头开始构建站点,但我正在进行维护工作。该网站使用 delayed_jobs 插件来处理一些后台任务,我希望能够在开发服务器上运行 rake jobs:work 以定期处理队列中的所有作业(由于服务器的配置,在开发服务器上运行脚本的守护程序版本不是一个选项)。但是,每当我尝试运行该命令时,都会收到以下经典Oracle错误:

尝试检索错误ora-12154

的文本时出现

错误

通常情况下,我认为这将是一个身份验证问题(例如database.yml中的凭据不正确),但该网站运行良好(并且执行大量数据库工作)。我尝试将 RAILS_ENV = production 作为参数添加到 rake 以强制它在生产环境中运行,但是得到了同样的错误(有两个单独的rails安装对于网站的生产和开发版本,我将开发的db配置文件中的“开发”和“生产”凭据设置为相同的。)

我不确定是什么导致了这个错误,而且我没有很多使用Oracle和rails的经验。有什么建议吗?

非常感谢!

贾斯汀

编辑(10/26/09):仍无法弄清楚造成问题的原因。应用程序继续运行(并与数据库通信)没有问题,但rake不断抛出数据库错误。脚本/控制台也是如此,它显示一个提示但首先抱怨同一个Oracle错误消息。我会继续寻找,但我的想法已经不多了......

EDIT(10/26/09,之后):遵循此链接的建议,我将 ORACLE_HOME TNS_ADMIN 都设置为指向tnsnames.ora所在的目录。设置 ORACLE_HOME 没有明显的效果,但是现在 TNS_ADMIN 指向正确的位置,每当我尝试打开控制台或运行rake时,我就开始出现分段错误:

/usr/local/lib/ruby/site_ruby/1.8/oci8.rb:184: [BUG]分段错误

并毫不客气地重新启动。还有什么想法吗?

有帮助吗?

解决方案

最后得到它......结果是ORACLE_HOME没有被正确设置为我的用户帐户的环境变量。现在rake,脚本/控制台等正在愉快地哼唱着。

其他提示

oracle错误说明如下:

  

ORA-12154由oracle网络层生成。在登录过程中向数据库抛出TNS错误消息。此错误表示Oracle(SQL * Net或Net8)中的通信软件无法识别连接参数中指定的主机/服务名称。此错误几乎总是表示oracle tns条目的配置错误。

您可以使用sqlplus或其他数据库工具连接到您的oracle实例吗?

奇怪的是应用运行良好。

是否存在可能指向不存在的数据库的$ ORACLE_SID?

在sql server中,我会运行profuiler,看看实际上发送了什么,我认为我已经设置了什么。我确信Oracle aslo有一些类型的分析工具。我会尝试看看,你可能会发现它没有使用你所知道的凭据。

好吧,正如迈克所说,ora-12145意味着TNS无法解析数据库标识符(TNS是Oracle的名称到数据库的映射,有点像DNS)。如果您可以找到tnsnames.ora文件,则可以查看在那里配置的数据库,并将其与database.yml文件进行比较。但是,它作为延迟作业但不是从命令行起作用的事实有点奇怪,并且让我觉得可能在一个上下文中设置了一些不在另一个上下文中的环境变量。

如果这些都没有出现,那么 上有很多疑难解答建议<一个特定于该错误代码的href =“http://ora-12154.ora-code.com”rel =“nofollow noreferrer”> http://ora-12154.ora-code.com 。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top