如何使用Oracle配置Ruby on Rails?

网上有几个讨论这个问题的网页,但大多数都是过时的或以某种方式不准确。

什么是独家新闻?

建造ruby,gem和铁轨

根据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,但需要Oracle JDBC jar ,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/tiger@orcl').exec('select * from user_tables') do |r| puts r.join(','); end" 

安装activerecord-oracle_enhanced-adapter

注意, 不是像许多旧页面提到的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 

在浏览器中测试

  

配置/ 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 

参考

一些额外的链接到以前的答案。

如果您使用的是Mac,那么您可以按照教程如何在Mac OS X上设置Ruby和Oracle Instant Client,以便从Ruby访问Oracle数据库。

然后,您可以阅读ActiveRecord Oracle增强适配器wiki,以在Ruby on Rails中获得Oracle连接。 此适配器在Oracle项目的许多Ruby on Rails中使用,并且正在进行主动维护。

我还经常在我的博客上发布有关Ruby和Oracle的文章 。

在我的例子中,我已经在Windows 7上安装了Ruby,gem,Rails和Oracle客户端。我为Windows 32位安装了ruby-oci8二进制包:

资料来源: 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 

并且您已准备好在Oracle上执行Rails。

只是反映当前版本的更新(截至撰写时:2015年8月):

  • 安装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),gem(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 )可以通常的方式安装(我使用rvm (1.26.11)为此 – https://rvm.io/ ),所以基本上这应该做三个gem的工作:

     gem install rails ruby-oci8 activerecord-oracle_enhanced-adapter 
  • 创建您的Rails应用程序

  • 配置您的Rails应用程序:

    • Gemfile添加activerecord-oracle_enhanced-adapterruby-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抓住gem: 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密码,以便能够创建用户并为其授予相应的权限。