Ruby on rails Oracle在Rails中使用rake存在问题,但在site中没有

Ruby on rails Oracle在Rails中使用rake存在问题,但在site中没有,ruby-on-rails,database,oracle,rake,Ruby On Rails,Database,Oracle,Rake,我正在一个连接到Oracle数据库的Rails站点上工作,虽然我没有从头开始构建该站点,但我正在做维护工作。该站点使用该插件来处理一些后台任务,我希望能够在开发服务器上运行rake jobs:work,定期处理队列中的所有作业(由于服务器的配置,在开发服务器上运行daemonized版本的脚本不是一个选项)。但是,每当我尝试运行该命令时,都会出现以下典型Oracle错误: 试图检索错误ora-12154的文本时出错 通常,我认为这可能是一个身份验证问题(例如,database.yml中的凭据不正

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

试图检索错误ora-12154的文本时出错

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

我不确定是什么导致了这个错误,而且我也没有将Oracle与rails结合使用的丰富经验。有什么建议吗

非常感谢

贾斯汀

编辑(10/26/09):仍然无法找出问题的原因。应用程序继续运行(并与数据库对话)没有问题,但rake不断抛出DB错误。脚本/控制台也是如此,它会显示一个提示,但首先会发出相同的Oracle错误消息。我会继续找的,但我没什么主意了

编辑(2009年10月26日,以后):根据的建议,我将
ORACLE\u HOME
TNS\u ADMIN
设置为指向tnsnames.ora所在的目录。仅仅设置
ORACLE_HOME
没有明显的效果,但是现在
TNS_ADMIN
指向了正确的位置,每当我试图打开控制台或运行rake时,我就开始出现分段错误:

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


然后被不客气地踢回提示符。还有其他想法吗?

oracle错误说明如下:

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

能否使用sqlplus或其他db工具连接到oracle实例

但奇怪的是,该应用程序运行良好


是否有$ORACLE\u SID放在某个可能指向不存在的db的地方?

ORACLE错误说明如下:

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

能否使用sqlplus或其他db工具连接到oracle实例

但奇怪的是,该应用程序运行良好


是否有一个$ORACLE\u SID放在某个地方,可能指向一个不存在的数据库?

在sql server中,我可能会运行profuiler来查看实际发送的内容,以及我认为我已经设置的内容。我相信Oracle也有一些分析工具。我会试试看,你可能会发现它没有使用你修改过的凭据。

在sql server中,我可能会运行profuiler来查看实际发送的内容,以及我认为我设置的内容。我相信Oracle也有一些分析工具。我会试试看,你可能会发现它并没有使用你修改过的凭据。

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


如果这两个问题都没有解决,那么会有一长串针对该错误代码的故障排除建议。

正如Mike提到的,ora-12145意味着TNS无法解析数据库标识符(TNS是Oracle的名称到数据库的映射,类似于DNS)。如果可以找到tnsnames.ora文件,则可以查看在那里配置了哪些数据库,并将其与database.yml文件进行比较。但是,它作为一个延迟作业而不是从命令行工作这一事实有点奇怪,这让我认为可能有一些环境变量是在一个上下文中设置的,而在另一个上下文中没有设置


如果这两个问题都没有解决,那么会有一长串针对该错误代码的故障排除建议。

最终得到了答案……结果是ORACLE\u HOME没有正确设置为我的用户帐户的环境变量。现在,rake、脚本/控制台等都在愉快地运行。

最终得到了它……结果是ORACLE\u HOME没有正确地设置为我的用户帐户的环境变量。现在,rake、脚本/控制台等都在愉快地运行。

是的,我可以使用与database.yml提供的凭据相同的凭据连接到DB fine。因此,令人头疼的是……是的,我可以使用与database.ym提供的凭据相同的凭据连接到DB fine