Not sure if these two can be compared, to bear with me. But what is the advantage (in a JRuby application) to run a configuration that’s similar to:
production:
adapter: jdbc
encoding: utf8
jndi: java:comp/env/app
pool: 200
versus:
production:
adapter: jdbcmysql
encoding: utf8
database: tgc
#socket: /var/lib/mysql/mysql.sock
host: localhost
port: 3306
username: mysql
password: notarealpassword
Is one more flexible than the other? Can I better tune with JNDI? The reason I ask is because my Resque workers cannot access the DB when I use the JNDI version above. I have to use the latter configuration for things to work properly.
JNDI abstracts DB configuration into the app server. Benefits include being able to deploy the same app across servers utilizing different DBs and/or DB characteristics without changing the application itself.
It’s often more a matter of policy/administration than anything else–keeping DB stuff isolated in this way gives more flexibility on the administrative side of things; things can be re-jiggered without the app (necessarily) being aware. (It doesn’t always work like that in real life, naturally.) If the people managing the DBs/servers aren’t the same people writing/deploying the app, JNDI can be very helpful.
That abstraction is manageable in other ways–Rails uses the DB config file, Spring might use server-specific config files, system properties, whatever. The differences are less technical, more managerial.