I’m developing a rails 2 app with a custom database for persistence
(not activerecord, not sql). I need to open the database once at
application startup and close it once at application shutdown. I
figured out how to add an application startup hook by putting a script
in config/initializers. I can’t figure out how to add a shutdown
hook. Can someone point me in the right direction? I really need to
close the database properly at shutdown time.
I’m developing a rails 2 app with a custom database for persistence
(not activerecord, not sql). I need to open the database once at
application startup and close it once at application shutdown. I
figured out how to add an application startup hook by putting a script
in config/initializers. I can’t figure out how to add a shutdown
hook. Can someone point me in the right direction? I really need to
close the database properly at shutdown time.
You may be misunderstanding one of the basics of Rails applications.
Rails
apps are not daemons that start up and then sit there running, waiting
for a
next request. A Rails app exists for exactly one request - response
cycle.
It starts up when it receives a request, and it shuts down after it
delivers
its response. When it receives another request the cycle is repeated.
Easiest thing in your case could be to define a start up method and a
shut
down method. Your start up method could be called based on a global or
a
class singleton. Your shut down method will probably have to be invoked
explicitly though.
I’m confused. The config/initializers script does exactly what I want
for opening the database, running once at app startup. Surely there’s
a comparable way to execute a shutdown script.
Or, what method(s) get called when I hit ctrl-c after I’ve started a
server or console instance? That’s where I need to close the
database.
I’m confused. The config/initializers script does exactly what I want
for opening the database, running once at app startup. Surely there’s
a comparable way to execute a shutdown script.
Don’t think there’s anything rails specific. Ruby provides at_exit
which allows you to register callbacks called on exit.
in config/initializers. I can’t figure out how to add a shutdown
delivers
its response.
Um what? Something like a mongrel instance is exactly something that
sits there and waits for requests to come in.
I noticed Rails reloads my classes on every request. My database
can’t handle that. My database depends on classes maintaining their
identity. That is, given a class “Person”, Person.object_id must not
vary across requests. Is there a way to turn off this “reload per
request” behavior? And why does it do this in the first place? Seems
rather strange.
Um what? Something like a mongrel instance is exactly
something that sits there and waits for requests to come in.
That’s true. But Mongrel is not your Rails app. The OP said “I need to
open the database once at application startup and close it once at
application shutdown.”. I was trying to separate the issues /
components.
Perhaps I should have said more about the other components of the Rails
application “ecosystem.”
I noticed Rails reloads my classes on every request. My database
can’t handle that. My database depends on classes maintaining their
identity. That is, given a class “Person”, Person.object_id must not
vary across requests. Is there a way to turn off this “reload per
request” behavior? And why does it do this in the first place? Seems
rather strange.
This is done to be able to refresh changes automatically while you are
developing, since normally that’s more handy than restarting the
server by hand to load changes. You can turn it off setting
config.cache_classes = true
in config/environments/development.rb.
Take into account that if you restart the application object IDs for
the same classes are not guaranteed to be the same (in general they
won’t be).
Also take into account that in the typical multi-process setup there
are as many interpreters running as processes, and thus those handlers
are going to run those many times.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.