How to get Rails working on Windows with a pre-existing oracle DB…..
I wanted to try and hookup Rails to our existing oracle DB at work. I had a rough time figuring this out, so here it is in case anyone else wants/needs it. In my case, I did not (nor did I want to) have a full Oracle client installed on my Windows box. trying to get this to work was not easy. I found 5 or 6 different pages that told different ways to get it to work, but none worked for me.
Most of this info was compiled from Oracle’s Rails FAQ and a few other pages on the net. These instructions assume you don’t have the Oracle client installed already. If you do, some of these steps may not be necessary(1, 3, 4)
- if you don’t have the Oracle client installed already, install the Oracle Instant Client (I installed the Basic, Lite version) – this zip contains some DLLs and jars. Extract them somewhere and note the location. Let’s call it [ORACLE_CLIENT_DIR]
- install the Oracle driver for Rails (I’m assuming you already have Rails installed). Details here.
- create a tnsnames.ora file in [ORACLE_CLIENT_DIR]/network/admin/. Put the text below in the file. Replace host, port, SID, and name (first line – MYORACLEDB in the example below) as necessary. If the DB uses a service_name instead of SID, replace SID in the file with SERVICE_NAME.
MYORACLEDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = some.server.com)(PORT = 1521))
)
(CONNECT_DATA =
(SID = mysidinfo)
)
)
- create Windows environment variables like so:
ORACLE_HOME = [ORACLE_CLIENT_DIR]
TNS_ADMIN = [ORACLE_CLIENT_DIR]/network/admin
you can create these globally in Windows or just set them up before running the server each time
- setup the database connection in your app as shown here, but replace
host: ORCL
with the name you used in your tnsnames.ora file (MYORACLEDB was used in the example above)
- if you are connecting to an existing DB that did not follow the standard pluralization conventions Rails likes (i.e. your table names are not pluralized), you need to tell Rails not to do pluralization (which it does by default). Open [yourapp]\config\environment.rb and put this at the bottom of the file:
ActiveRecord::Base.pluralize_table_names = false
That’s it! Now, you can generate models, controllers, etc. and they should hookup to your Oracle DB as you would expect. Hopefully I didn’t miss any steps. I wrote this after I had it working, not while I was trying to get it working. If you are in a similar situation and these steps don’t work, feel free to leave a comment and I’ll see if I can help.