The ideal RoR environment

I'm currently taking some time to re-examine my environment and wanted
to get the input from the minds that read these forums in an attempt
to piece together an ideal RoR environment. I'm trying to break out
each necessary aspect of a project and get thoughts and opinions on
what people think is the best tool for the function. For the sake of
discussion, I'd like to assume a Linux/UNIX based environment but I do
have a couple of projects running in Windows if anybody has any
thoughts in that department. If I've made any glaring
omissions...please tell me.

My thanks for any feedback you can offer.

Testing - Cucumber, RSpec, and ApacheBenchmark. Using Cucumber for
the high-level tests and RSpec for low-level ones and AB for load-
testing. I was one of the people that learned Ruby and Rails and
ignored the testing features for a long time but I'm on board now and
believe this to be a good testing suite.

Fixture-Creation - I am unfamiliar with this outside of rails
fixtures. I have been told that they aren't the best way to go and
that I should look into Factory Girl or Machinist as a replacement.

Version-Control - I currently use SVN, but would be interested in
hearing arguments for learning Git.

Deployment - Capistrano...is there anything better?

WebServer - I currently use Apache & Mongrel. I've heard/read good
things about Passenger and Nginx though. Is it worth switching to a
Passenger / Nginx solution or maybe some hybrid?

Document-Generation - I have used both pdf-writer and prawn for PDFs
in the past. I have some windows projects that have generated word
and excel docs via win32ole. I spent a minimal amount of time trying
to generate OpenOffice docs but never had the proper time to devote to
getting it working.

Graphing - I have used Gruff in the past. I also played around with
ZiYa and found it to be an intriguing possibility.

Thanks again for any thoughts. Now that I've typed it all out I'm
thinking maybe this should've been separated into separate posts for
clarity but as a start I hope this will do.

Bob

Testing - Cucumber, RSpec, and ApacheBenchmark. Using Cucumber for
the high-level tests and RSpec for low-level ones and AB for load-
testing. I was one of the people that learned Ruby and Rails and
ignored the testing features for a long time but I’m on board now and
believe this to be a good testing suite.

I agree, we use RSpec for unit testing, Cucumber + Selenium for integration tests (because our app uses a huge amount of client side javascript)

Fixture-Creation - I am unfamiliar with this outside of rails
fixtures. I have been told that they aren’t the best way to go and
that I should look into Factory Girl or Machinist as a replacement.

Factory Girl is nice, that’s what we use. Machinist is certainly just as good. It all depends on what syntax you prefer. They’re certainly both better than Rails fixtures.

Version-Control - I currently use SVN, but would be interested in
hearing arguments for learning Git.

Git has several advantages over SVN. Since it’s a distributed version control system, you can just commit locally (even when not connected to the net), then push the changes to a central server. Where Git excels over SVN imo is the branching. In SVN branching and merging was a living hell, git just makes it something you use all the time. It’s hard to explain why git is so much better, but once you’ve experienced a few of subversion’s annoying quirks and tried out git, you’ll never look back. Use either github or gitosis (on your own server) for repo management.

Deployment - Capistrano…is there anything better?

Capistrano has never failed us. There’s a few alternatives like Vlad The Deployer and Fabric, but I see no reason to switch from Capistrano.

WebServer - I currently use Apache & Mongrel. I’ve heard/read good
things about Passenger and Nginx though. Is it worth switching to a
Passenger / Nginx solution or maybe some hybrid?

You could also use Apache+Passenger. Nginx is less memory hungry than Apache. What’s really nice about Passenger is the smart spawning and you have one (or more if you’re using a mongrel cluster) process and possible point of failure to take into account.

Document-Generation - I have used both pdf-writer and prawn for PDFs
in the past. I have some windows projects that have generated word
and excel docs via win32ole. I spent a minimal amount of time trying
to generate OpenOffice docs but never had the proper time to devote to
getting it working.

We use PrinceXML for PDF generation, but it’s expensive. I know someone who has succesfully created Word documents with OpenOffice, but haven’t got any experience doing so myself.

Best regards

Peter De Berdt

SVN is a nightmare when working in teams, remotely, or trying to be
agile. You can *make* it work, but only because you change your
behaviour to work the path of least resistance in SVN - not ideal
AFAIC.

Git is better, Mercurial may be better still (a little more
flexability than Git, but not as wide support); or if you want to be
really cutting edge, look at Fossil (http://fossil-scm.org).
Check out www.hginit.com for a very good "from SVN to Mercurial"
blog/tutorial - but the principles are very similar for Git.

Bob wrote:

I'm currently taking some time to re-examine my environment and wanted
to get the input from the minds that read these forums in an attempt
to piece together an ideal RoR environment. I'm trying to break out
each necessary aspect of a project and get thoughts and opinions on
what people think is the best tool for the function. For the sake of
discussion, I'd like to assume a Linux/UNIX based environment but I do
have a couple of projects running in Windows if anybody has any
thoughts in that department.

My thoughts: don't use Windows for *anything*. It's a bad server OS.
It's a bad desktop OS. Avoid.

My OS preferences: Mac OS X for development, Ubuntu Linux for server.
They are the most pleasant and capable in each case IMHO.

If I've made any glaring
omissions...please tell me.

My thanks for any feedback you can offer.

Testing - Cucumber, RSpec, and ApacheBenchmark. Using Cucumber for
the high-level tests and RSpec for low-level ones and AB for load-
testing. I was one of the people that learned Ruby and Rails and
ignored the testing features for a long time but I'm on board now and
believe this to be a good testing suite.

I've never used ab. I highly, highly recommend Cucumber and RSpec. And
of course, it goes without saying that all development is done
story-first: write the Cucumber story, watch it fail, write the RSpec
specs of what you need to implement the story, watch them fail, make
them pass.

Fixture-Creation - I am unfamiliar with this outside of rails
fixtures. I have been told that they aren't the best way to go and
that I should look into Factory Girl or Machinist as a replacement.

Fixtures are broken. They should be removed from Rails. Under no
circumstances should any Rails developer ever attempt to use them.
Machinist is the way to go here, with Factory Girl a reasonable second
choice (it's a bit more cumbersome).

Version-Control - I currently use SVN, but would be interested in
hearing arguments for learning Git.

Do yourself a favor and get rid of Subversion today. Subversion is
about the best centralized version control system that I'm aware of, but
centralized version control is a paradigm with many problems. No
project in 2010 should be without distributed version control.

Deployment - Capistrano...is there anything better?

Not that I've heard of.

WebServer - I currently use Apache & Mongrel. I've heard/read good
things about Passenger and Nginx though. Is it worth switching to a
Passenger / Nginx solution or maybe some hybrid?

Why are you torturing yourself with Apache and Mongrel? Passenger (and
Ruby EE) is absolutely the right thing to use. It makes Rails
deployment as easy as PHP deployment. Nginx is also probably a good
choice.

Document-Generation - I have used both pdf-writer and prawn for PDFs
in the past. I have some windows projects that have generated word
and excel docs via win32ole. I spent a minimal amount of time trying
to generate OpenOffice docs but never had the proper time to devote to
getting it working.

Rails is a Web framework. Word and Excel documents have no place on the
Web -- they do not work well as interchange formats or play nicely with
Web browsers. Do not design your Web applications in such a way that
Word and Excel documents are generated -- that's just irresponsible.

I use Prawn for PDF generation. At some point I plan to look at Flying
Saucer and wkhtmltopdf.

Graphing - I have used Gruff in the past. I also played around with
ZiYa and found it to be an intriguing possibility.

No experience here. I'd probably go with Google Charts/Visualizations
up to the point where it stopped suiting my needs.

Thanks again for any thoughts. Now that I've typed it all out I'm
thinking maybe this should've been separated into separate posts for
clarity but as a start I hope this will do.

Bob

Best,

Bob wrote:

I'm currently taking some time to re-examine my environment and wanted
to get the input from the minds that read these forums in an attempt
to piece together an ideal RoR environment. I'm trying to break out
each necessary aspect of a project and get thoughts and opinions on
what people think is the best tool for the function. For the sake of
discussion, I'd like to assume a Linux/UNIX based environment but I do
have a couple of projects running in Windows if anybody has any
thoughts in that department. If I've made any glaring
omissions...please tell me.

Oh, one thing that you didn't mention: database. If you are using
MySQL, I strongly recommend getting rid of it and switching to
PostgreSQL, which is a much more capable database system. And whatever
DBMS you are using, please respect the database's intelligence by giving
it the tools to help you out. That means using foreign key constraints
(with the foreigner gem), making proper use of aggregate functions,
indices, and bulk queries.

Best,

Tsch!

Rails is a Ruby framework - and it can be used to make web
applications, or non-web intranet applications, or a mix of whatever a
client asks.
If a client asks to produce the functionality to export data into the
office-application format of their choice, then it's not irresponsible
to do exactly that.
(at a preference, I output PDFs and CSVs, but if I *had* to make a
Word doc - and I can imagine situations it would be asked for - then
so be it)

Michael Pavling wrote:

Version-Control - I currently use SVN, but would be interested in
hearing arguments for learning Git.

SVN is a nightmare when working in teams, remotely, or trying to be
agile. You can *make* it work, but only because you change your
behaviour to work the path of least resistance in SVN - not ideal
AFAIC.

Git is better, Mercurial may be better still (a little more
flexability than Git, but not as wide support);

Really? I thought Mercurial's alleged simplicity (such as it is -- I
couldn't understand it when I tried it) was achieved by its being *less*
flexible than Git and so having fewer options to deal with.

or if you want to be
really cutting edge, look at Fossil (http://fossil-scm.org).

How is Fossil cutting-edge? It just looks like "DVCS for dummies", or
like a project-management system (with wiki and tracker) that decided to
implement its own VCS. I tend to think any DVCS whose stated goal is to
avoid excessive branching is missing the point.

Check out www.hginit.com for a very good "from SVN to Mercurial"
blog/tutorial - but the principles are very similar for Git.

Best,

Michael Pavling wrote:

Rails is a Web framework. �Word and Excel documents have no place on the
Web -- they do not work well as interchange formats or play nicely with
Web browsers. �Do not design your Web applications in such a way that
Word and Excel documents are generated -- that's just irresponsible.

Tsch!

Rails is a Ruby framework - and it can be used to make web
applications, or non-web intranet applications,

An Intranet app is still a Web application by my definition. It works
over HTTP and is viewed through a client's Web browser. It works the
same way as a public Web application. Whether it can be seen by people
outside the company or not is irrelevant in this regard.

or a mix of whatever a
client asks.
If a client asks to produce the functionality to export data into the
office-application format of their choice, then it's not irresponsible
to do exactly that.

Yes it is. If a client asks me that, then it is my responsibility as an
ethical, responsible developer to tell them that IMHO they are making a
suboptimal choice, and to explore other alternatives with them.

The client gets to dictate business needs, not technical implementation.

(at a preference, I output PDFs and CSVs, but if I *had* to make a
Word doc - and I can imagine situations it would be asked for - then
so be it)

For me, no way, unless there were some *external* requirement (say,
interfacing with a third-party system that the client had no control
over, and that only accepted Word files). I won't do something that I
know to be wrong.

Best,

Testing - Cucumber, RSpec, and ApacheBenchmark. Using Cucumber for

the high-level tests and RSpec for low-level ones and AB for load-
testing. I was one of the people that learned Ruby and Rails and
ignored the testing features for a long time but I’m on board now and
believe this to be a good testing suite.

I agree, we use RSpec for unit testing, Cucumber + Selenium for integration tests (because our app uses a huge amount of client side javascript)

I agree.

Fixture-Creation - I am unfamiliar with this outside of rails

fixtures. I have been told that they aren’t the best way to go and
that I should look into Factory Girl or Machinist as a replacement.

Factory Girl is nice, that’s what we use. Machinist is certainly just as good. It all depends on what syntax you prefer. They’re certainly both better than Rails fixtures.

I agree.

Version-Control - I currently use SVN, but would be interested in

hearing arguments for learning Git.

Git has several advantages over SVN. Since it’s a distributed version control system, you can just commit locally (even when not connected to the net), then push the changes to a central server. Where Git excels over SVN imo is the branching. In SVN branching and merging was a living hell, git just makes it something you use all the time. It’s hard to explain why git is so much better, but once you’ve experienced a few of subversion’s annoying quirks and tried out git, you’ll never look back. Use either github or gitosis (on your own server) for repo management.

I agree on Git. I for one use Github for repository management. I find it great when doing team work.

Deployment - Capistrano…is there anything better?

Capistrano has never failed us. There’s a few alternatives like Vlad The Deployer and Fabric, but I see no reason to switch from Capistrano.

Vivre Capistrano!!

WebServer - I currently use Apache & Mongrel. I’ve heard/read good

things about Passenger and Nginx though. Is it worth switching to a
Passenger / Nginx solution or maybe some hybrid?

You could also use Apache+Passenger. Nginx is less memory hungry than Apache. What’s really nice about Passenger is the smart spawning and you have one (or more if you’re using a mongrel cluster) process and possible point of failure to take into account.

I use Nginx myself.

Document-Generation - I have used both pdf-writer and prawn for PDFs

in the past. I have some windows projects that have generated word
and excel docs via win32ole. I spent a minimal amount of time trying
to generate OpenOffice docs but never had the proper time to devote to
getting it working.

We use PrinceXML for PDF generation, but it’s expensive. I know someone who has succesfully created Word documents with OpenOffice, but haven’t got any experience doing so myself.

For Prawn and Prawnto is still a superb combination!! I have ever tried OpenOffice, and it is also cool (but not as cool as Prawn/Prawnto).

If a client asks to produce the functionality to export data into the
office-application format of their choice, then it's not irresponsible
to do exactly that.

Yes it is. If a client asks me that, then it is my responsibility as an
ethical, responsible developer to tell them that IMHO they are making a
suboptimal choice, and to explore other alternatives with them.

For instance: They want a application (web-technology-based or
otherwise) to manage their foos and bars - it's going to be internal
only. They use MS Office desktop applications. They want their
application to export mailshots as Word documents so they can edit
them before printing.

There is no alternative to explore.

Certainly, if you think they are making bad choices, then it's right
to tell them. But the final decision is theirs (and I'd recommend
their decision should be to let me decide :wink:

The client gets to dictate business needs, not technical implementation.

But they're paying, so if they have a technical implementation
requirement, which they stick to despite my advice to go with another
choice, then I would judge it to be unethical to not do what they
want. If my objection is big enough, then I can quit the job. [1]

[1] I'm currently working on some PHP development, which is running on
IIS and MSSQL, because some middle-manager bought an expensive server,
which has to be seen to "work". It's frustrating, but that's the
situation. I work with it, or I don't. They *won't* install *nix and
MySQL, etc.
I really don't like it, but my mortgage has to be paid.

In so far as it is a moderately new development by people who have
used other DVCS applications and said to themselves "we'd do it
slightly differently". I don't mean to say it's necessarily any
good... it may or may not be (fundamentally), and it may or may not be
(for some specific situation).

I have seen some reports from people whom I respect the opinion of,
which say they like it, and it is good from their PoV.

HTH

Michael Pavling wrote:

If a client asks to produce the functionality to export data into the
office-application format of their choice, then it's not irresponsible
to do exactly that.

Yes it is. �If a client asks me that, then it is my responsibility as an
ethical, responsible developer to tell them that IMHO they are making a
suboptimal choice, and to explore other alternatives with them.

For instance: They want a application (web-technology-based or
otherwise) to manage their foos and bars - it's going to be internal
only. They use MS Office desktop applications. They want their
application to export mailshots as Word documents so they can edit
them before printing.

There is no alternative to explore.

Certainly, if you think they are making bad choices, then it's right
to tell them. But the final decision is theirs (and I'd recommend
their decision should be to let me decide :wink:

Yes, the final decision is theirs. I'm perfectly happy to forgo a job
that would mean putting myself in an untenable position.

The client gets to dictate business needs, not technical implementation.

But they're paying, so if they have a technical implementation
requirement, which they stick to despite my advice to go with another
choice, then I would judge it to be unethical to not do what they
want. If my objection is big enough, then I can quit the job. [1]

[1] I'm currently working on some PHP development, which is running on
IIS and MSSQL, because some middle-manager bought an expensive server,
which has to be seen to "work". It's frustrating, but that's the
situation. I work with it, or I don't. They *won't* install *nix and
MySQL, etc.
I really don't like it, but my mortgage has to be paid.

So the client is making you support the server but won't take your
advice on how to configure it? Very simply put, I wouldn't take a job
like that for any amount of money. It's a setup for failure.

(My current Rails job is for a big company using MS SQL -- but doing it
right. The Rails app itself is on a *nix box with Passenger, and we
developers all have test and development instances of the DB on the MS
SQL server, as well as Windows VMs that we can use if we'd rather run
our DBs locally.)

Best,

Michael Pavling wrote:

or if you want to be
really cutting edge, look at Fossil (http://fossil-scm.org).

How is Fossil cutting-edge?

In so far as it is a moderately new development by people who have
used other DVCS applications and said to themselves "we'd do it
slightly differently". I don't mean to say it's necessarily any
good... it may or may not be (fundamentally), and it may or may not be
(for some specific situation).

I have seen some reports from people whom I respect the opinion of,
which say they like it, and it is good from their PoV.

That's good to know.

HTH

Best,

Michael Pavling wrote:

"HAL, do the mailmerge..." :slight_smile:

Michael Pavling wrote:

[1] I'm currently working on some PHP development, which is running on
IIS and MSSQL, because some middle-manager bought an expensive server,
which has to be seen to "work". It's frustrating, but that's the
situation. I work with it, or I don't. They *won't* install *nix and
MySQL, etc.
I really don't like it, but my mortgage has to be paid.

So the client is making you support the server but won't take your
advice on how to configure it?

Not quite... they won't let me anywhere near the server full stop...
paranoid city.
I just give them the code and DB scripts to manipulate the data as
needed... ho hum.

Very simply put, I wouldn't take a job like that for any amount of money.

You've not got my mortgage! :slight_smile:

Michael Pavling wrote:

Michael Pavling wrote:

[1] I'm currently working on some PHP development, which is running on
IIS and MSSQL, because some middle-manager bought an expensive server,
which has to be seen to "work". It's frustrating, but that's the
situation. I work with it, or I don't. They *won't* install *nix and
MySQL, etc.
I really don't like it, but my mortgage has to be paid.

So the client is making you support the server but won't take your
advice on how to configure it?

Not quite... they won't let me anywhere near the server full stop...
paranoid city.
I just give them the code and DB scripts to manipulate the data as
needed... ho hum.

If the server is set up properly, and if they've got a decent sysadmin,
that sounds great. If not, then it's a recipe for disaster.

Very simply put, I wouldn't take a job like that for any amount of money.

You've not got my mortgage! :slight_smile:

AFAIK, you have no idea what my financial obligations are. But no job
is worth my sanity. I also don't really like the idea of enabling
clueless behavior in clients -- I'd rather they get it through their
head that if they want a good developer, they have to provide the
necessary support to that developer.

My current job pays very well, and it also provides an excellent
environment for me and my fellow developers. If both were not the case,
I'd be out of there in a second.

Best,

Wow...thanks for all of the great feedback so far. I had a feeling
there were better options than SVN out there. In fact, it was when I
started looking into Git that I had the idea of taking some extra time
to see if other elements of my environment would also benefit from an
upgrade (ie my Apache & Mongrel setup). Sounds like that's the best
place to begin improving to see an immediate benefit.

Peter mentioned Selenium which made me realize that I also have Watir
in my toolbox for both testing and for navigating to pages for the
purpose of scraping. I never tried Selenium but that might be
something worth looking into as well.

I didn't intend to start a debate of whether it was good practice to
generate office documents as an output but I have projects that have
required it in the past and I'm sure it will come up again in the
future.

Bob