【问题标题】:Cannot connect my rails app to Oracle无法将我的 rails 应用程序连接到 Oracle
【发布时间】:2012-03-21 16:25:12
【问题描述】:

我有一台运行Oracle的服务器,IP是192.168.1.50。

在我的 linux 机器上,我需要连接到这个 Oracle 服务器。然后我安装了 Oracle Instant 客户端并相应地设置了环境变量:

OCI_INCLUDE_DIR=/home/luc/instantclient_11_2/sdk/include
LD_LIBRARY_PATH=/home/luc/instantclient_11_2
DYLD_LIBRARY_PATH=/home/luc/instantclient_11_2/
OCI_LIB_DIR=/home/luc/instantclient_11_2
ORACLE_HOME=/home/luc/instantclient_11_2

我还安装了相应的 gem:

ruby-oci8 (2.1.0)

定义模型并运行 rake db:migrate 后,我收到以下错误消息:

rake aborted!
ORA-12154: TNS:could not resolve the connect identifier specified
oci8.c:360:in oci8lib_191.so
/home/luc/.rvm/gems/ruby-1.9.3-p125/gems/ruby-oci8-2.1.0/lib/oci8/oci8.rb:123:in `initialize'
/home/luc/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-oracle_enhanced-adapter-1.4.1/lib/active_record/connection_adapters/oracle_enhanced_oci_connection.rb:319:in `new'
/home/luc/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-oracle_enhanced-adapter-1.4.1/lib/active_record/connection_adapters/oracle_enhanced_oci_connection.rb:319:in `new_connection'
/home/luc/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-oracle_enhanced-adapter-1.4.1/lib/active_record/connection_adapters/oracle_enhanced_oci_connection.rb:429:in `initialize'
/home/luc/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-oracle_enhanced-adapter-1.4.1/lib/active_record/connection_adapters/oracle_enhanced_oci_connection.rb:24:in `new'
/home/luc/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-oracle_enhanced-adapter-1.4.1/lib/active_record/connection_adapters/oracle_enhanced_oci_connection.rb:24:in `initialize'
/home/luc/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-oracle_enhanced-adapter-1.4.1/lib/active_record/connection_adapters/oracle_enhanced_connection.rb:9:in `new'
....

我的 database.yml 是:

development:
  adapter: oracle_enhanced
  host:  192.168.1.50:1521/orcl
  username: USER
  password: PASS

sqlplus 连接可以完美运行:

sqlplus USER/PASS@192.168.1.50:1521/orcl

SQL*Plus: Release 11.2.0.3.0 Production on Wed Mar 21 17:34:26 2012

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> 

这个conf有什么遗漏吗?

更新

我已经从命令行进行了测试,并且连接工作正常:

ruby -rubygems -e "require 'oci8'; OCI8.new('USER','PASS','192.168.1.50/orcl').exec('select * from users') do |r| puts r .join(','); 结束"

=> 好的

来自 irb 的相同内容:

ActiveRecord::Base.establish_connection(:adapter => "oracle_enhanced", :database => "//192.168.1.50/orcl",:username => "USER",:password => "PASS")

=> 好的

但仍然无法在我的 rails 应用程序中工作。

更新 2

使用数据库而不是主机修复了这个问题:

development:
  adapter: oracle_enhanced
  database:  //192.168.1.50:1521/orcl
  username: USER
  password: PASS

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 oracle


    【解决方案1】:

    使用数据库而不是主机修复了这个问题:

    development:
      adapter: oracle_enhanced
      database:  //192.168.1.50:1521/orcl
      username: USER
      password: PASS
    

    【讨论】:

    • 我都定义了;删除主机解决了问题。
    【解决方案2】:

    如果您想使用 EZConnect 语法连接到 Oracle,您的 database.yml 文件中的 host 需要包含前导斜杠,即

    host: //192.168.1.50:1521/orcl
    

    Connecting to Oracle in Ruby on Rails 上的这篇 OTN 文章中提供了配置 Rails 以访问 Oracle 数据库的其他方法示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 2023-03-27
      • 2020-04-10
      • 1970-01-01
      • 2018-04-18
      • 1970-01-01
      • 2012-10-09
      相关资源
      最近更新 更多