在database.yml中使用tnsnames.ora

时间:2011-01-20 18:45:56

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

如何在连接Rails时使用tnsnames.ora中的数据库连接信息?

我尝试将database.yml中的database:host:字段设置为SID,但都没有效果。

我验证了sqlplus可以连接到数据库,所以tnsnames.ora是正确的。

如果有帮助的话,我在Rails 3上使用DataMapper。

2 个答案:

答案 0 :(得分:1)

我想我们几天前在#datamapper发言。 Sqlplus是一个Oracle软件,它与我认为的负载均衡系统接口。

DataMapper假定存储库和数据存储区之间存在1对1的映射。通常这意味着您假设负载平衡处理数据存储区(例如mysql或postgres集群)。

然而,没有什么能阻止某人编写一个允许DataMapper在一组存储库之间进行热交换的库,如果有可能读取与每个存储库关联的每个数据存储上的负载(即写下你的自己的小负载平衡路由器)。

我工作的公司正是以这种方式使用DataMapper存储库(用于记录的可分离性,而不是负载平衡)。

它很简单:

DataMapper.repository(seed_repository_symbol) { return your_code_block.call }

答案 1 :(得分:0)

经过几个小时的烦恼,我发现答案是:

# WORKS
development:
  adapter: oracle
  host: devdb
  username: user
  password: pwd

我在Win7上使用Rails 3.2.1,DM 1.2.0,同时安装了32位和64位常规Oracle客户端。

我在此过程中发现了一件非常重要的事情:你必须在每个mod.yml mod之间重新启动rails dev服务器以获取更改。我浪费了很多时间不知道这一点。出于某种原因,DataMapper设置没有像开发服务器那样正常地进行更改。

历史:

我被告知答案是这个(由另一家在Windows上使用JRuby的公司的开发人员):

# DID NOT WORK
development:
  adapter: oracle
  database: user/pwd@devdb

这对我不起作用,我怀疑答案是使用冒号(基于DataMapper.setup语法):

# DID NOT WORK
development:
  adapter: oracle
  database: user:pwd@devdb

这也不起作用所以我在IRM中测试了手动连接并研究了来自DataMapper.setup的响应。它将SID放在host中并且不表示database所以我在database.yml中尝试了相同的操作。它奏效了。