Как настроить Ruby on Rails с Oracle?

В Интернете есть несколько страниц, которые обсуждают это, но большинство из них устарело или неточно.

Что совок?

Ответ 1

Сборка рубинов, драгоценных камней и рельсов

согласно http://rubyonrails.org/download:

build ruby
build gem
use gem to install rails

Получить Oracle Instantclient

Загрузить с http://www.oracle.com/technology/tech/oci/instantclient/index.html

Вам нужны эти два пакета для вашей архитектуры.

instantclient-basic
instantclient-sdk

Разархивируйте эти файлы и сделайте эту ссылку

cd instantclient_10_2
# .dylib for mac, .so for linux
ln -s libclntsh.dylib.10.1 libclntsh.dylib

Сборка ruby-oci8

Примечание. Пользователям JRuby не нужен ruby-oci8, но нужен банкомат JDBC Oracle, либо ojdbc6.jar, либо ojdbc5.jar в зависимости от того, есть ли у вас Java 6 или Java 5.

Скачайте с http://ruby-oci8.rubyforge.org/en/index.html и запустите

# DYLD for mac
export DYLD_LIBRARY_PATH=/path/to/instantclient_10_2
# LD for linux
export LD_LIBRARY_PATH=/path/to/instantclient_10_2
ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install

Протестируйте эту строку и строку подключения к базе данных.

ruby -r oci8 -e "OCI8.new('scott/[email protected]').exec('select * from user_tables') do |r| puts r.join(','); end"

Установка адаптера activerecord-oracle_enhanced-адаптера

Заметьте, не activrecord-oracle-adapter, как упоминает много старых страниц.

gem install activerecord-oracle_enhanced-adapter

Сделайте эту вещь с рельсами

rails railstest
cd railstest
# edit config/database.yml as below
ruby script/generate scaffold comic title:string issue:integer publisher:string
rake db:migrate
ruby script/server

Тест в браузере

<http://localhost:3000/comics>

конфиг /database.yml

Используйте базу данных, если у вас есть запись TNS, иначе используйте хост. Обратите внимание, что у вас есть три записи (devel, test, production) для обновления.

development:
    adapter: oracle_enhanced
    database: orcl           # format is tns-name entry
    host:  myorclhost/orcl   # format is hostname/instance-name
    username: scott
    password: tiger

Ссылки

Ответ 2

Некоторые дополнительные ссылки на предыдущий ответ.

Если вы находитесь на Mac, вы можете следовать руководству Как настроить Ruby и Oracle Instant Client на Mac OS X, чтобы получить доступ к База данных Oracle из Ruby.

Затем вы можете прочитать ActiveRecord Oracle расширенный вики-адаптер, чтобы получить возможность подключения Oracle в Ruby on Rails. Этот адаптер используется во многих проектах Ruby on Rails на Oracle и находится под активным обслуживанием.

Я также регулярно публикую о Ruby и Oracle на моем blog.

Ответ 3

В моем случае у меня уже был Ruby, gem, Rails и клиент Oracle в Windows 7. Я установил бинарный пакет ruby-oci8 для Windows 32-bit:

Источник: http://ruby-oci8.rubyforge.org/en/file.install-binary-package.html

gem install ruby-oci8
gem install --platform x86-mingw32 ruby-oci8

И затем:

gem install activerecord-oracle_enhanced-adapter

и вы готовы сделать Rails на Oracle.

Ответ 4

Просто обновление, чтобы отразить текущие версии (начиная с записи: август 2015):

  • Установить libaio (на Ubuntu/Debian Linux, возможно, с apt-get install libaio-dev - 0.3.109-4)
  • Загрузить Oracle Instant Client (12.1.0.2.0, Basic + SDK должно быть достаточно, еще не пробовал Basic Lite вместо Basic).
  • Установите переменные среды (соответствующие вашим потребностям):

    export LD_LIBRARY_PATH=/path/to/the/Instant/Client/directory
    export NLS_LANG="German_Germany.WE8ISO8859P1"
    
  • Ruby (2.2.1p85), драгоценный камень (2.4.6), Rails (4.2.3), ruby-oci8 (2.1.8, https://github.com/kubo/ruby-oci8) и activerecord-oracle_enhanced-adapter (1.6.2, https://github.com/rsim/oracle-enhanced) можно установить обычным способом (I использовал rvm (1.26.11) для этого - https://rvm.io/), поэтому в основном это должно выполнить работу для трех драгоценных камней:

    gem install rails ruby-oci8 activerecord-oracle_enhanced-adapter
    
  • Создайте приложение Rails

  • Настройте приложение Rails:

    • в Gemfile добавить activerecord-oracle_enhanced-adapter и ruby-oci8:

      gem 'activerecord-oracle_enhanced-adapter'
      gem 'ruby-oci8'
      
    • в config/database.yml добавить среду Oracle:

      development:
        adapter: oracle_enhanced
        host: my-db-host
        port: my-port
        database: my-db
        username: my-user
        password: my-password
      
    • Пусть Bundle возьмет драгоценные камни: bundle install:

      ...
      Using activerecord-oracle_enhanced-adapter 1.6.2
      ...
      Using ruby-oci8 2.1.8
      ...
      
    • Готов к грохоту:

      rails generate scaffold book title:string author:string
      rake db:create db:migrate
      ...
      

Примечание:

В зависимости от вашей среды Oracle (т.е. my-user уже существует или должен быть создан) вы можете опустить оператор db:create или нет. В последнем случае rake предлагает вам пароль SYS/SYSTEM, чтобы иметь возможность создать пользователя и предоставить ему соответствующие привилегии.