我尝试在Windows 7 x64 PC上使用最新的 oracle_enhanced , ruby-oci8 宝石连接到Oracle DB,但失败如下:
**C:\Program Files\Oracle\instantclient_12_1**
我通过下载安装了Oracle即时客户端并将其解压缩到
require 'active_record'
ActiveRecord::Base.establish_connection(
adapter: 'oracle_enhanced',
database: 'my_db_sid',
host: 'my_db_host',
port: 1531,
username: 'username',
password: 'password'
)
class Customer < ActiveRecord::Base
self.table_name = 'CUSTOMER'
end
puts "First: #{Customer.first}"
我添加了指向 C:\ Program Files \ Oracle \ instantclient_12_1 的环境变量 TNS_ADMIN 。 我将TNS_ADMIN添加到Path。
运行简单的ruby脚本时:
connection = ActiveRecord::Base.establish_connection(
adapter: 'oracle_enhanced',
database: 'my_db_sid',
host: 'my_db_host',
port: 1531,
username: 'username',
password: 'password'
)
puts connection.inspect
#class Customer < ActiveRecord::Base
# self.table_name = 'CUSTOMER'
#end
#
#puts "First: #{Customer.first}"
如果我删除对Customer表的调用,我可以检查连接对象:
vector<string> hj{ "jack" };
vector<double> x{ 8 };
NamePairs pair1(hj,x);
知道这里有什么问题?该脚本在其他PC上工作得很好,但与其他数据库和环境有关。所以使用的设置应该没问题。 谢谢。
环境:
答案 0 :(得分:0)
您需要使用某种不同格式的database
部分。这是我的配置:
adapter: "oracle_enhanced"
username: "db_user"
database: "//my.host/my.sid"
password: "passw0rd"
答案 1 :(得分:0)
我想出了如何连接到2个数据库中的一个。它们具有不同的设置,至少在Sqldeveloper v 4.1.3.20中。
以下是适合我的设置(请注意,它不在Rails上下文中,只是一个ruby文件):
require 'active_record'
ActiveRecord::Base.establish_connection(
adapter: 'oracle_enhanced',
host: 'as specified in the field Host name of SQL developer',
port: 'as specified in the field Port of SQL developer',
database: 'as specified in the fiels Service name of SQL developer',
username: 'username',
password: 'userpassword'
)
class Department < ActiveRecord::Base
self.table_name = 'DEPARTMENTS'
end
puts "First found department: #{Department.first.inspect}"
第二个数据库在SQL开发人员中有不同的设置:
- host: some_host_url
- port: some port number
- SID: some SID value
最后一个解决方案是添加以下设置:
HOST = "your host"
PORT = XXXX #your port number
SID = 'your SID'
ActiveRecord::Base.establish_connection(
adapter: 'oracle_enhanced',
database: "(DESCRIPTION=
(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=#{HOST})(PORT=#{PORT})))
(CONNECT_DATA=(SID=#{SID}))
)",
username: 'user',
password: 'secret'
)
希望这有帮助。