Switching to production - OCIError (ORA-12154: TNS:could not resolve the connect identifier specified):

Hi all.

Ruby version: ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] Rails version: rails 1.2.3

I finished my first RoR application (Rails and Oracle, using the oci adapter). I am pretty close to production install time and I thought I had done my homework and learned how to setup the production environment:

- I changed 'environment.rb' and un-commented the line ENV['RAILS_ENV'] ||= 'production'.

- To make sure I was using the correct database I even commented out the development and test sections in the 'database.yml' file.

When I tested the application with WEBrick everything looked good. Then I installed Mongrel as a Windows service following the instructions that can be found at http://noobonrails.blogspot.com/2006/06/how-to-setup-mongrel-as-native-windows.html and realized that something is wrong with the production environment when I got the error.

I can indeed see the service and I can start and stop it and seems to be working fine. But after the service is running, when I start the application I get the error above. I also get the same error if I start Mongrel (mongrel_rails start -p 3000 -e production) or WEBrick (ruby script/server webrick -p 3000 -e production) manually to use the production environment, as you can see in the -e parameter.

I have noticed that if I don't specify the production environment Mongrel tells me that it's starting the development one. And both servers do log all activity in the development log file.

What is that I am missing here to make the whole thing work in production?

Thanks.

hey, can u post ur database.yml ? looks like production and development connections are different and not setup correctly. Also confirm that TNSNAMES.ORA has entry for both (dev and prod) of your config.

-Pavan

Hello Pavan,

I don't think the problem is in database.yml. The box where I'm trying to make this work is a test box with same setup as the production box will have. It has a unique database, so when I 'switch' between development and production the database is actually the same. The 'development' and 'test' sections are all commented out now and everything works fine if I start the web servers without specifying the production environment (-e production). This is what I have in the 'production' section of 'database.yml' (I'm going by memory here):

production:   adapter: oracle   host: localhost   database: XE   user: myUser   pwd: myPassword

I don't have 2 different entries in TNSNAMES.ORA either. I didn't think I needed them since there is only one database to connect to. Does that matter?

Thanks!

Pepe

Hey Pepe, If I understand your setup right, you have a single instance of oracle (SID: XE) with two users. One for development database and the other one for production. In such a case you do not need separate TNSNAMES entries.

http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/81265d60a3d8b9e1 has some details.

Hope it helps!

Hi Pavan.

Very close but not perfect. :slight_smile:

Single instance of oracle (XE). Single database. Single user for both development and production environments. I was just trying to switch from 'development' to 'production' by modifying setup values and installing Mongrel as a Windows service since it's supposed to be quite faster than WEBrick. Seemed simple but didn't work for me, giving me the OCI error I mentioned in the first post. BTW, just to see if there is something wrong with the service I created another one for Mongrel but in 'development mode' and it's been working fine, so I know it has nothing to do with the services.

I had just a minute yesterday to take a look at the link you posted. I think I've done many of the things in it if not all but I'll take a closer look as soon as I can to see if there is something there that I can use. Thanks a lot.

Pepe