Как настроить Rails и SQLPlus на Oracle VM для совместной работы

Для одного из моих проектов мне нужно использовать базу данных Oracle в приложении Rails.

Для локальной разработки я установил Oracle VM VirtualBox с пакетом Oracle Developer Day. Я успешно развернул, запустил виртуальную машину, вошел в систему и даже создал пользователя на 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'

Мой конфигурационный файл для моей базы данных dev является следующим 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

Заранее спасибо за помощь

1 ответ

Решение

Я понял. Итак, пара проблем: сначала сетевой конфиг. Используйте мостовой адаптер вместо NAT, как показано ниже

Во-вторых, файл конфигурации в приложении rails (database.yml), не забудьте 2 косые черты перед IP ...

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

И все это хорошо!

Другие вопросы по тегам