关于'require'的OCIError;权限问题?

时间:2010-06-23 12:44:15

标签: ruby oracle solaris oci8

我刚刚开始在工作中学习/使用Ruby。我有一个超级简单的测试脚本,它只连接到我们的Oracle 10g数据库,运行一个select,并将结果“放入”屏幕。这是在Solaris 10服务器上。如果我将脚本作为“apps”用户(运行我们的自动脚本的系统用户)运行,则脚本会运行罚款。如果我像我一样运行它,它会抛出一个错误:

oci8lib.c:98:in oci8lib.so: OCI Library Initialization Error (OCIError)
    from /usr/local/lib/ruby/site_ruby/1.8/oci8.rb:25
    from ./dbTest.rb:3:in `require'
    from ./dbTest.rb:3

我的env vars与'apps'用户匹配。我假设这是一些文件/目录或其他的权限问题,但我不知道从哪里开始寻找。 oci8.rb文件中的第25行是“require'oci8lib_18'”指令。我对oci8lib_18.so文件以及导致它的dirs有读取和执行权限,但我不知道需要访问哪些目录。

有没有人对我应该检查权限的文件/目录有什么建议?或者关于问题可能是什么的任何其他想法?

更新我一直在向支持OCI8的人发送电子邮件,结果发现有几个Oracle目录具有阻止我的登录访问所需信息的权限。一个简单的测试是尝试运行sqlplus,它也失败了。

戴夫

2 个答案:

答案 0 :(得分:2)

先验我不知道。其他ruby应用程序是否使用OCI运行?通常,库和子库都安装了rwx-r-xr-x。您永远不应该在正确安装的库上看到权限错误。所以我猜测你在环境中缺少一些东西,可能就像LD_LIBRARY_PATH中的一个条目

ldd打开共享库的方式与运行时映像完全相同。

看看这是否有效:

cd /path/to/library   # where oci8lib.so lives.  
ldd oci8lib.so

这应该显示所有外部链接的库,没有错误。 如果ldd有效,请检查LD_LIBRARY_PATH以确保在那里声明您现在所在的路径。如果它不起作用,则会出现某种安装问题,例如缺少库或库的非标准路径。

请回复我们的结果。

答案 1 :(得分:0)

我一直在向支持OCI8的人发送电子邮件,结果发现有几个Oracle目录具有阻止我的登录访问所需信息的权限。一个简单的测试是尝试运行sqlplus,它也失败了。