D
Dave Howell
I feel I should start with some pre-emptive apologies. I used to =
subscribe to this list, but haven't been reading it for a year or so, so =
I may have missed the answer to my question. (I did try finding it in =
the list archives, of course.) Also, I'm a little frustrated, and that =
might adversely influence the tone of this message. I'll try to avoid =
that, but I beg your forgiveness if I sound a little snide.=20
I started using Ruby years ago, but, although I built my first =
database-driven website in 1998, before Microsoft had invented ASP =
pages, I'd never had the time to work with Rails. I've been looking =
forward to it, and last week finally had the chance to take a closer =
look. To my dismay, I discovered that one of the core opinions of this =
'opinionated software' is exactly opposed to one of mine. For my work, =
the data is the supreme treasure, and the database engine is the =
god-emperor.=20
"Migrations" really had me mystified when I started trying to figure out =
Rails. The idea that I would ever consider letting the middleware have =
any kind of write access to the database schema seemed so improbable =
that I spent rather a lot of time looking for the 'other' tutorial, the =
one where you start with the data and work your way forward to the web =
site, rather than starting in the middle and working out in both =
directions.=20
I eventually figured out that Rails just doesn't work that way. Clearly, =
the paradigm that it uses is very effective for a lot of people. That's =
a fine thing; I'm not here to try to convince people that it's doing =
stuff the 'wrong way.' I just need to find something that supports a =
more data-centric (and database-centric) approach.=20
I have an old site I'd like to modernize, and a brand-new site to =
develop. My pre-existing site is currently using WiTango as the =
middleware, and I'd love to keep using it, but can't afford the $5,000 =
non-restricted server license. I've been looking at various non-Rails =
options, and it looks like, to a certain degree, it turns into a =
snap-your-own-together situation, where I get to pick a framework (like =
Merb, Padrino, Ramaze, Nitro, etc.), an adapter (Mongrel, Rack, WEBrick, =
Thin, etc.), a templating engine (Erubis, Liquid, Haml, Markaby, Radius, =
etc, etc, etc, etc), and an ORM. Since I'm working from the database =
out, I'm starting with the ORM, and will then find parts that work well =
with it.
Not too surprisingly, most explanations and introductions tend to =
compare the new ORM to what somebody would have been doing in Rails; =
most people reading those pages will have already worked in Rails. It =
took me a little while to figure out that most of the information *I* =
wanted was appearing under the phrase 'legacy database.' I'm not dealing =
with a 'legacy' database for the new project; I'm still finishing up the =
work on the PostgreSQL schema. It's brand new, and I'm leveraging =
Postgres's feature set hard in order to protect the integrity of the =
data. Composite unique keys, foreign keys, and two different custom =
datatypes are part of the schema, for example.
ActiveRecord did turn out to have a command available to build its =
migration file (I think that's what it was) FROM the schema, rather than =
vice versa. Unfortunately, it only managed to extract about 20% of the =
tables, because I'm using UUIDs for the primary keys, not sequences or =
integers, and it didn't know what to do with a UUID. I have no doubt =
that there is some place, somewhere, where I could define a new database =
type, but a couple of hours digging and fiddling with various files =
didn't lead me to the solution.=20
I did get the distinct impression that, while it was almost certainly =
possible, it probably wouldn't ever be smooth. I decided it made more =
sense to try to find an ORM that was more comfortable with the idea it =
could only reflect the database's schema, rather than trying to make the =
DB schema conform to Ruby objects.=20
So far, I've found DataMapper, Friendly, M4DBI, Ohm, and Sequel as =
possible alternative ORMs, but all the documentation for them is heavy =
with terminology and jargon from Rails, and usually brags about how I =
can make tables appear in my database magically from my Ruby objects. =
Which ORMs are better for connecting to my Postgres databases in a way =
that will best take advantage of, or at least not get in fights with, =
the constraints enforced by Postgres itself?
Thanks for reading to the end of a pretty long message, and thanks even =
more to those of you who help me figure out where to look for the =
answers.
subscribe to this list, but haven't been reading it for a year or so, so =
I may have missed the answer to my question. (I did try finding it in =
the list archives, of course.) Also, I'm a little frustrated, and that =
might adversely influence the tone of this message. I'll try to avoid =
that, but I beg your forgiveness if I sound a little snide.=20
I started using Ruby years ago, but, although I built my first =
database-driven website in 1998, before Microsoft had invented ASP =
pages, I'd never had the time to work with Rails. I've been looking =
forward to it, and last week finally had the chance to take a closer =
look. To my dismay, I discovered that one of the core opinions of this =
'opinionated software' is exactly opposed to one of mine. For my work, =
the data is the supreme treasure, and the database engine is the =
god-emperor.=20
"Migrations" really had me mystified when I started trying to figure out =
Rails. The idea that I would ever consider letting the middleware have =
any kind of write access to the database schema seemed so improbable =
that I spent rather a lot of time looking for the 'other' tutorial, the =
one where you start with the data and work your way forward to the web =
site, rather than starting in the middle and working out in both =
directions.=20
I eventually figured out that Rails just doesn't work that way. Clearly, =
the paradigm that it uses is very effective for a lot of people. That's =
a fine thing; I'm not here to try to convince people that it's doing =
stuff the 'wrong way.' I just need to find something that supports a =
more data-centric (and database-centric) approach.=20
I have an old site I'd like to modernize, and a brand-new site to =
develop. My pre-existing site is currently using WiTango as the =
middleware, and I'd love to keep using it, but can't afford the $5,000 =
non-restricted server license. I've been looking at various non-Rails =
options, and it looks like, to a certain degree, it turns into a =
snap-your-own-together situation, where I get to pick a framework (like =
Merb, Padrino, Ramaze, Nitro, etc.), an adapter (Mongrel, Rack, WEBrick, =
Thin, etc.), a templating engine (Erubis, Liquid, Haml, Markaby, Radius, =
etc, etc, etc, etc), and an ORM. Since I'm working from the database =
out, I'm starting with the ORM, and will then find parts that work well =
with it.
Not too surprisingly, most explanations and introductions tend to =
compare the new ORM to what somebody would have been doing in Rails; =
most people reading those pages will have already worked in Rails. It =
took me a little while to figure out that most of the information *I* =
wanted was appearing under the phrase 'legacy database.' I'm not dealing =
with a 'legacy' database for the new project; I'm still finishing up the =
work on the PostgreSQL schema. It's brand new, and I'm leveraging =
Postgres's feature set hard in order to protect the integrity of the =
data. Composite unique keys, foreign keys, and two different custom =
datatypes are part of the schema, for example.
ActiveRecord did turn out to have a command available to build its =
migration file (I think that's what it was) FROM the schema, rather than =
vice versa. Unfortunately, it only managed to extract about 20% of the =
tables, because I'm using UUIDs for the primary keys, not sequences or =
integers, and it didn't know what to do with a UUID. I have no doubt =
that there is some place, somewhere, where I could define a new database =
type, but a couple of hours digging and fiddling with various files =
didn't lead me to the solution.=20
I did get the distinct impression that, while it was almost certainly =
possible, it probably wouldn't ever be smooth. I decided it made more =
sense to try to find an ORM that was more comfortable with the idea it =
could only reflect the database's schema, rather than trying to make the =
DB schema conform to Ruby objects.=20
So far, I've found DataMapper, Friendly, M4DBI, Ohm, and Sequel as =
possible alternative ORMs, but all the documentation for them is heavy =
with terminology and jargon from Rails, and usually brags about how I =
can make tables appear in my database magically from my Ruby objects. =
Which ORMs are better for connecting to my Postgres databases in a way =
that will best take advantage of, or at least not get in fights with, =
the constraints enforced by Postgres itself?
Thanks for reading to the end of a pretty long message, and thanks even =
more to those of you who help me figure out where to look for the =
answers.