0

对于我的一个项目,我需要在 Rails 应用程序上使用 Oracle 数据库。

对于我的本地开发,我安装了带有Oracle Developer Day包的Oracle VM VirtualBox。我成功地部署、启动了 VM、登录,甚至在 SQLPlus 上创建了一个具有管理员权限的用户。

在我的 mac OSX Mavericks 上,我安装了 Oracle 的即时客户端以及以下版本的 ruby​​-oci8 和 activerecord-oracle_enhanced-adapter

   gem ruby-oci8', '~> 2.0.6'
   gem 'activerecord-oracle_enhanced-adapter', '~> 1.4.1'

我的开发数据库的配置文件是以下 database.yml

development:
  adapter: oracle_enhanced
  host: 192.168.2.170:1521/myprogram_development
  username: my_new_sql_plus_username
  password: my_new_sql_plus_password

在 Oracle VM 方面,我已经设置了我的网络,如屏幕截图所示

网络 NAT 转发端口

当我连接我的虚拟机时,我的 IP 与上面的 database.yml 文件相同

在此处输入图像描述

一切看起来都很好(我已经按照本教程的每个步骤进行操作,也尝试了这个),但是当我尝试我的rake db:setup命令或通过 访问数据库时OCI8.new("my_new_sql_plus_username", "my_new_sql_plus_password", "//192.168.2.170:1521:1521/orcl"),我收到以下错误消息。

rake aborted!
ORA-12170: TNS:Connect timeout occurred
oci8.c:267:in oci8lib_191.bundle
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-oracle_enhanced-adapter-1.4.3/lib/active_record/connection_adapters/oracle_enhanced_oci_connection.rb:326:in `new'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-oracle_enhanced-adapter-1.4.3/lib/active_record/connection_adapters/oracle_enhanced_oci_connection.rb:326:in `new_connection'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-oracle_enhanced-adapter-1.4.3/lib/active_record/connection_adapters/oracle_enhanced_oci_connection.rb:436:in `initialize'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-oracle_enhanced-adapter-1.4.3/lib/active_record/connection_adapters/oracle_enhanced_oci_connection.rb:24:in `new'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-oracle_enhanced-adapter-1.4.3/lib/active_record/connection_adapters/oracle_enhanced_oci_connection.rb:24:in `initialize'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-oracle_enhanced-adapter-1.4.3/lib/active_record/connection_adapters/oracle_enhanced_connection.rb:9:in `new'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-oracle_enhanced-adapter-1.4.3/lib/active_record/connection_adapters/oracle_enhanced_connection.rb:9:in `create'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-oracle_enhanced-adapter-1.4.3/lib/active_record/connection_adapters/oracle_enhanced_base_ext.rb:13:in `oracle_enhanced_connection'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/connection_adapters/abstract/connection_pool.rb:315:in `new_connection'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/connection_adapters/abstract/connection_pool.rb:325:in `checkout_new_connection'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/connection_adapters/abstract/connection_pool.rb:247:in `block (2 levels) in checkout'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/connection_adapters/abstract/connection_pool.rb:242:in `loop'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/connection_adapters/abstract/connection_pool.rb:242:in `block in checkout'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/connection_adapters/abstract/connection_pool.rb:239:in `checkout'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/connection_adapters/abstract/connection_pool.rb:102:in `block in connection'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/connection_adapters/abstract/connection_pool.rb:101:in `connection'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/connection_adapters/abstract/connection_pool.rb:410:in `retrieve_connection'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/connection_adapters/abstract/connection_specification.rb:171:in `retrieve_connection'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/connection_adapters/abstract/connection_specification.rb:145:in `connection'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-oracle_enhanced-adapter-1.4.3/lib/active_record/connection_adapters/oracle_enhanced.rake:26:in `create_database_with_oracle_enhanced'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/railties/databases.rake:62:in `block (3 levels) in <top (required)>'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/railties/databases.rake:62:in `each'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/railties/databases.rake:62:in `block (2 levels) in <top (required)>'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_wrapper:14:in `eval'
/Users/stephanethomas/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_wrapper:14:in `<main>'
Tasks: TOP => db:setup => db:schema:load_if_ruby => db:create

在此先感谢您的帮助

4

1 回答 1

0

我想到了。所以有几个问题:首先是网络配置。使用桥接适配器而不是 NAT,如下所示

在此处输入图像描述

二、rails app中的配置文件(database.yml),别忘了IP前面的2个斜线...

development:
  adapter: oracle_enhanced
  host: //192.168.2.170:1521/myprogram_development
  username: my_new_sql_plus_username
  password: my_new_sql_plus_password

这一切都很好!

于 2013-11-06T21:58:20.260 回答