On Tuesday, March 5, 2013 10:52:52 AM UTC-8, Ed Ruder wrote: > > When Sequel connects to the database is not an implementation detail > because it has side effects. >
Plenty of things that are implementation details have side effects. Just because something is an implementation detail does not mean it has no side effects. > For example, we're using Sequel in a small Rails app. We're setting up the > connection_validator in an initializer, so that it's configured for the > life of the app. We also have Rake tasks that drop the database, create it, > and apply migrations to it. This task happens to need to load the Rails > environment before running, so the connection_validator is set up. But the > drop of the database fails, because of the database connection that is > outstanding: > > dropdb: database removal failed: ERROR: database "bbox_test" is being > accessed by other users > DETAIL: There are 1 other session(s) using the database. > > > We can have code run differently (e.g., not depend on the Rails environment), > but because we have to change around our code to work properly, I think it's > incorrect to say that "The point at which Sequel makes a connection is an > implementation detail". For reasons like ours, when Sequel makes a connection > needs to be well-documented and predictable, *so that* clients can write > their code properly. > > Any time you want to drop a database you have connected to, you should be running Database#disconnect first. That's true regardless of whether you use the connection_validator extension or not. The fact that your code worked before you used the connection_validator extension was just luck. For example, if you had loaded a model class or run any queries in your initializer, you would have had the same error. Thanks, Jeremy -- You received this message because you are subscribed to the Google Groups "sequel-talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sequel-talk?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
