(correction): fixed Upton Sinclair quote it is ’salary’ not ‘job’ (thanks for the correction)
Even with all the buzz, it is still a tough sell. If you’ve suggested Rails as an alternative to (Java|.NET) at work, you’ve probably experienced some reactionary pushback. Convincing a set of established “Enterprisy” engineers that Rails is worth paying attention to it is like convincing a Texas oil baron that he should purchase a Subcompact hybrid vehicle and become a Vegan. Why is convincing a highly paid (Java|.NET) programmer to look at Rails that difficult? I’ll steal a quote from Al Gore’s Inconvenient Truth that he, in turn, stole from Upton Sinclair:
“It is difficult to get a man to understand something when his salary depends on not understanding it.” - Upton Sinclair (1878 - 1968)
In an effort to convince, you may have sent people to some of the good Ruby on Rails blogs. This might have escalated the resistance. Asking your fellow enterprise developers to read DHH’s loudthinking.com, is like asking (the other) O’Reilly to sit down with Colbert - Mr. Enterprise isn’t going to appreciate the message because he’ll be focused on the ridicule. Rails, rightly so, is positioned as the challenger, and it makes good use of hyperbolic ridicule to gain converts. This works for most of us, but I’ve also seen it push some entrenched Java developers further away.
Common Responses
So, you are in “The Big Planning” meeting, and your boss says something like, “There is no time to finish this project, we’re going to have to tell the customer we won’t meet the deadline.” You wearily offer up the suggestion: “We might be able to deliver something on time if we used Rails to implement the web application”. And, an entire room full of Java programmers is now trying to tell you every reason from here to the North Pole why your suggestion is naïve. Here are some of the common responses:
- Freedom (Too Much) - “Our developers are not disciplined enough to use a scripting language.”
- Rigor / Formality - “Our systems are serious and require a much more rigorous approach.”
- Performance - Our systems need to perform, and Ruby (specifically Ruby on Rails) doesn’t perform to our standards.
- Flexibility (Not Enough) - (Rails) We can’t afford to follow the database standards that Rails would impose on us
Let’s take each one individually…read on…
Myth #1: Too Much Freedom
“My developers are not disciplined enough for a scripting language, we need the structure that a platform like .NET provides.”
Answer: If your developers really do lack discipline, then they should probably not be programming in something as complex as .NET. Or, Java, let’s take Java as an alternative, Java is a powerful language, but it is a language based on choice: you can create a web application using one of 30+ web frameworks, you can deal with persistence using Hibernate, iBatis, or just direct JDBC. And, if you are using the Spring Framework, you are really defining your own custom architecture as you go. If you need this level of flexibility, use Java, but, IMO, you have to be a bit more disciplined to create a good architecture in Java than you would to follow the bright lights in a Rails application.
The real answer to Myth #1: “If your developers are not very disciplined, you can’t afford to not be using a tool like Ruby on Rails. If your developers are disciplined enough to learn Struts + Spring + Hibernate + WebSphere, then I’m surprised you can’t expect them to learn ActiveRecord. Who are these people? I don’t believe you, what’s the real reason?”
Myth #2: Rails isn’t “Rigorous”.
Scripting languages do not provide an adequate level of “structure”.
“Our systems are serious and require a much more rigorous approach.”
Answer: Myth #2 is born of a belief that systems built-atop scripting languages can be difficult to maintain, and this Myth is closely related to Myth #1. The problem with this myth is that it has absolutely nothing to do with scripting languages and everything to do with a universal industry truth - Bad Code is Difficult to Maintain Regardless of the Language. Anyone who’s had an encounter with bad Perl code in the past is going to appeal to this myth, but the real truth is that, again, it is less a specific problem with Ruby and more a fear of the unknown. I’ve seen .NET systems designed with all the rigorous process-driven, test-first, pattern-inspired magic you will find, but they were still a quagmire of logic.
The other reason someone might offer this up is because they are frightened of not having compile-time type safety (or just frightened of not having a compiler at all). Compile-time type-safety isn’t so bad when we’re talking about the Solid Rocket Booster or a FIX gateway for the London Stock Exchange. But, with enough testing, this argument doesn’t make sense for something like a Web UI.
The real answer to Myth #2: “Right! Let’s go back to the customer and tell them that even though we could deliver something on time, we’re not going to because it’s not a rigorous technical solution and that our developers are not disciplined enough to program in Ruby on Rails. What makes Ruby less ’serious’ than Java? You guys could still draw UML diagrams of model objects to your heart’s content, and, if you really need me to, I could generate just as many gantt charts and word documents about the code we write in Ruby.”
Myth #3: Performance
“It just ain’t fast enough…”
Answer: What isn’t fast enough? Rails? Well optimize your deployment, figure out what a materialized view is. Think about the database a little bit, are you querying a table with 10 million rows? and do you know what an index is? Have you thought about database partitioning? Start using memcache, get faster hardware, use 40 instances of Mongrel. Don’t just stand there, fix it. You’d do the same for your .NET application. Myth #3 usually translates to, “I just don’t want to use Rails, and someone told me it isn’t fast enough.” In my experience Rails scales as long as you apply some brain power to your performance problems. If you just expect Rails to scale without taking any steps to achieve scaleability then you’ve really just staged a show trial for Rails. This myth is offered from people who want to Rails to break a leg out of the gate. If this is your reason, don’t tell me you didn’t have to go through a dog and pony show to optimize every other platform in your production network. Performance optimization is a black art regardless of the language or platform.
Compared to Java: From the perspective of real cost, the cost of scaling a Ruby application is on par with a similar Java application. It takes about the same hardware to scale a big J2EE application as it would take to scale a large Ruby on Rails deployment. We’re talking about a few commodity servers running Mongrel with lots of memory. IMO, it might be a lttle easier to setup Apache + mod_proxy + mongrel + Capistrano + memcached, than it is to go through the motions of installing JBoss or Tomcat and then dealing with the lack of OS integration that most Java servers suffer from. In other words, if you are creating an application and attempting to scale horizontally, you’ll probably end up paying just about the same $$ to scale a well designed Java app or a Ruby app (assuming your container is free). You may end up buying an extra one or two servers for your Ruby application, but you are going to make up the cost in development.
The real answer to Myth #3: “So, we’re not going to meet our deadline because you feel that Ruby on Rails just ‘isn’t fast enough’ in an abstract sense. You haven’t used it yet, we haven’t tested an application, or sized a real production deployment. No one has done an apples to apples comparison, all we’re going on now is your belief that Ruby doesn’t scale? Before you go on, let’s agree to at least study the issue, and the next time we talk let’s discuss specific numbers.”
Myth #4: Flexibility
“We can’t afford to follow the database naming conventions ActiveRecord demands”
Answer: You don’t have to use the ActiveRecord naming conventions. (I’ve heard this more than a few times, “we can’t use rails because of our database…”) Sure, it is marginally easier if your database tables follow the naming conventions, but let me assure you Rails can work with almost any database no matter how strange. To prove this I’ll use a Siebel database as an example. A Siebel database is definitely not designed for ActiveRecord. Every table has a MS_IDENT column which is the primary key….then every table has a ROW_ID column which happens to be the application specific identifier. Column names of the foreign keys do not match the names of the tables they references. Foreign keys don’t really reference the real primary key, they reference the application specific id which isn’t just a simple autoincrementing integer. There are hundreds of tables, and, my favorite, no define FK constraints. Did I mention that all of the table and column names are somewhat cryptic. It took a little bit of effort, a module and some before_create methods, but if I can get a Siebel database to work with Rails, you can use ActiveRecord with anything.
Compared to Java: …turn the tables on this one. EJB3 annotations in Java has the same “default naming assumption” behavior. If you don’t supply column names and table names, EJB3 will just assume them from the names of the columns and tables. If someone rules out Rails because of database naming conventions force them to hold Java (or .NET) to the same standard. Also, anyone who has been using Hibernate will tell you that Hibernate certainly has problems with oddly conceived databases - I’ve spent days trying to work with 3-way mapping tables in Hibernate only to find out that there’s some really mysterious bug with @MapKey.
The real answer to Myth#4: “You are mistaken. If you read more than the first 40-pages of the “Agile Web Development…” book, you would know this.”
Conclusion: When Reason Fails to Persuade…
Sneak it into the organization if your arguments fail. Eventually someone will notice, and there’s a good chance you’ll get in trouble. But, there’s always a chance that your transgression will go unnoticed and your boss can go on happily believing that he is using a “Real Platform”. J
But do us all a favor, if you are going to employ Rails behind hostile territory don’t turn into to one of those O’Reilly Radar-reading cool kids who is constantly throwing around references to Paul Graham and talking about how cool Web 2.0 is. Take your time, know your enemy, and work slowly. Use the language of your corporate masters
Wrong: “Ruby is a revolution, dude, it’s going to change the way you think about coding. Rails will run circles around your fancy SpringMVC or ASP.NET applications. Coding Rails is fun!”
Right: “Mr. Supervisor, sir, may I speak freely?”…..”I think we could leverage Ruby as a competitive advantage. For our next low-risk web application I propose that we engage in a feasibility study to assess the impact of a lightweight rapid application development framework. There is a real possibility that Ruby could encourage the productivity increase which will allow us to finish Q3 well under budget. It would be a great addition to our Enterprise’s ‘knowledge portfolio’.”


This article was titled, "Bringing Rails to the Enterprise," and it missed one important thing that Rails isn't very good at yet: Integration with other Enterprisey Applications. We are making headway with plugins like activemessaging, but with the stifled soap4r development, and the amount of research it would take to actually have your .NET or or Spring/Tapestry/Hibernate application integrate with your Rails app could be overwhelming to the "undiciplined masses"
Keep in mind, that I have great hopes for Rails, and that is why all my applications are based on Ruby and or Rails at the current second. Rails is on its way, but hasn't quite arrived to its rightful place in the Enterprise.
@bryan,
Rails is a full stack (web 2 db), it tends to reach down into the database, and for most of what I do, this is where the real integration happens. A rails app will modify the same database a SOA framework written in Java uses, then my rails app might notify some workflow engine (something in BPEL) that data is ready for action.
but, i think you are right, you still have to be creative when it comes to integration with a larger existing framework.
soap4r is pretty capable from what i've seen so far, tell me what the challenge has been? For most of the stuff I've been doing I'm usually stepping back to XML and using REXML to parse messages produced by existing Java systems.
One promising messaging opion is to use STOMP, I know ActiveMQ uses it.
"Rails isn't very good at yet: Integration with other Enterprisey Applications."
I've gotten Rails and .NET talking very well together. Took about 15 minutes of troubleshooting and bang it was going via SOAP. Passing complex objects was also very easily done.
One argument I bet others hear:
"We are an IIS shop, Rails doesn't run on IIS very well other than a hack, nor does it run as well on Windows as it does on OS X or Linux".
One thing that blocks Ruby adoption in the Microsoft-oriented shops is that you can't use the gem command if an authenticating proxy (i.e. ISA Server) is in the way. I created a gem to solve this problem, for Windows clients at least. It allows Ruby to authenticate with the proxy server as the current user, just like IE and Firefox, without requiring you to type a password or username anywhere.
The gem can be installed via 'gem install rubysspi'. The ruby forge project page is at
http://rubyforge.org/projects/rubysspi/
InfoQ did a write up on the gem which explains its benefits nicely:
http://www.infoq.com/news/2006/11/rubysspi-gem-released
I've gotten Rails and .NET talking very well together. Took about 15 minutes of troubleshooting and bang it was going via SOAP. Passing complex objects was also very easily done.
I'm not saying this isn't possible. I have a Rails app that talks to Axis and .NET based servers. It also passes messages using the STOMP protocol by way of the ruby stompserver.
Can Rails interact with JMS with minimal configuration? Yes, but you will need an extra plugin and a server like ActiveMQ to translate STOMP to JMS
Can Rails access SOAP based APIs? Yes, but you will need to make sure you have a current soap4r installed, and you may run into configuration issues if you have http-access2 installed.
To really bring Rails to the Enterprise, functions like I mentioned before need to be *easy* to do. I don't know whether this means including more functionality into Rails (i really hope this won't happen), or does it mean that there needs to be better documetation on how make Rails interact with other Enterprisey apps. I do know that Rails will have to be *easier* to use because unlike Java and .NET, Rails doesn't have huge corporate backers with extremely large advertising budgets. So for Rails to actually exceed in those environments, it really will have to be easier to use and better performing with minimal configuration.
I still think Rails isn't a serious option for most of us. Your article doesn't address the cost of retraining a whole department to support rails. Thanks for wasting my time.
@Corporate Guy,
*Shrug* OK, well I guess you are never going to use new technology or try anything that requires people to adapt to changing technology. So, Mr. Corporate Guy, let me get this straight, your argument against Rails is "My people can't learn anything new."
While it's true that for low volume sites, Rails is fast enough, it's not true that it scales the same way Java does. Because you have to have a 40MB mongrel instance for each simultaneous request, you wind up using much more memory and hardware for medium to large volume Rails apps than Java apps.
Scaling teams with duck-typed languages is much harder than scaling teams with statically typed languages. This is doubly difficult when the team is used to the compiler being one of the tests that they run (does it compile?) The switching costs to get a team of Java or C# developers to really test-first and stop relying on the compiler is a 6+ month task. During that time, you lose a lot of the development speed issues that you gain with Rails.
A language without interfaces makes defining the responsibilities of different groups that much harder. Java development can scale to many teams of 10+ people. I have not seen a Rails project with more than 2 teams and more than 10 people total. Yes, some of this is because of Java's overhead (you need people) but sometimes the projects get more complex than can be handled by the small, agile team.
An important part of any web application is deployment. Most enterprises have QA and ops teams that know how to do Java. Changing the platform means changing what the developers, the QA and the ops teams do. This is a broader change than "you three guys go prototype this in Rails and if it looks good, we'll deploy it." The QA folks are expecting WAR files. The ops guys are expecting WAR files. Rails means Ruby and gems and rails and a c/c++ compiler and mongrel on *every* machine in the process from developer to deployment. This is a huge and costly burden and can often eclipse the cost of developing 1 or 2 apps 30% faster.
Finally, Rails does certain things very, very well. However, Rails is very weak in other areas. Writing multi-page "wizards" is easier in Java with Struts than it is in Rails. Managing complex state that does not directly map to tables in the database is more difficult in Rails than in J2EE.
For simple CRUD apps that can be written by a small team and deployed on an "off-grid" (e.g., intranet departmental server), Rails is a much better choice than Java. For big, hardcore apps, Java is a better choice.
So, for everyone who's about to flame me, "Yes, I use Rails." 70% of the lines of code I write are Ruby and they're evenly split between Ruby applications and Rails apps. I also write in Java and most recently, Scala. I've got 8 Rails apps currently in deployment (6 are commercial.) I've been doing Rails for 18 months and Java for 10 years. For small projects, I recommend Rails. There is *not* a linear relationship between a small Rails project and an enterprise project.
@David P.
First, thanks for the awesome response. I've got some disagreements no doubt, but for you to take the time to respond shows that this is an interesting debate, and your response is going to add clarity for anyone looking at the alternatives.
Point by point:
"While it's true that for low volume sites, Rails is fast enough, it's not true that it scales the same way Java does. Because you have to have a 40MB mongrel instance for each simultaneous request, you wind up using much more memory and hardware for medium to large volume Rails apps than Java apps."
Again, this really depends on the specific situation. First, we're talking about, in real terms, scaleability or simultaneous user capacity. So, let's take the basecamp figures stated by DHH from here. He says ~500k requests with 2.5 servers in late 2005, I'm going to assume this has increased. I've worked on sites that have at least 10-20 times that traffic level, and at a site like that you usually end up spending a truly inordinate amount of cash (a million) on servers. At the client that had this much traffic, during a spike, you would see about 600-800 request/sec. Not all of them required an application server, but you are talking about spreading load over tens of low-end servers (6x 2-way 4GB RAM) or a handful or super monster servers (2x 16-way 20 GB servers). A huge site has already spent millions on hardware, and using your metric of 40MB per instance, you would need approximately 24 GB to serve 600 simultaneous dynamic requests via a bunch of Mongrel boxes. That's not too different from what you would need to host a comparable Java application.
David, for the site that really needs to scale. I'm going to bet you a million dollars that RoR isn't going to be the first thing to fall on the floor. First, you'll be optimizing content delivery way before your site has to handle 600 req/sec. You'll be making some pages static, and the more likely pain point is going to be the database. If anything is going to be a limit it is going to be MySQL, and that's independent of your choice of framework. For the largest sites on the Internet, the difference in cost is going to be imperceptable.
For medium sites, we're still not talking about an unrealistic scalability scenario. Let's take a site that could expect 2 million hits spread equally throughout an eight hour working day. This translates to about 70 req/sec. This is no small site, but even then, by your estimate of 40MB per instance, we're only talking about 3 GB of RAM. Now you might say, 2 million hits won't be spread out evenly over an entire day, I'll have spikes of 3x average traffic. Even at 200 req/sec, we're only talking about 8 GB, and if your site is getting 2 million hits a day (and under the unlikely circumstance that every request is dynamic), I'm sure your organization would prefer to pay for the RAM vs. the developers. At 8 GB, we're talking two serious low-end servers with 6 GB a piece or maybe 4 commodity boxes.
Scaling teams with duck-typed languages is much harder than scaling teams with statically typed languages. This is doubly difficult when the team is used to the compiler being one of the tests that they run (does it compile?) The switching costs to get a team of Java or C# developers to really test-first and stop relying on the compiler is a 6+ month task. During that time, you lose a lot of the development speed issues that you gain with Rails.
So, I can't argue with this. I think that if your team isn't unit testing already, you are probably going to have problems regardless of the platform. I use Eclipse for Java development, so the compiler helps me while I'm writing code, but the real bugs in programming can't be solved by a compiler. I guess my response to this is, I'm not advocating the 50,000 line analog to a Java program. It's not the same language. And, no one's advocating that you abandon your current platform.
A language without interfaces makes defining the responsibilities of different groups that much harder. Java development can scale to many teams of 10+ people. I have not seen a Rails project with more than 2 teams and more than 10 people total. Yes, some of this is because of Java's overhead (you need people) but sometimes the projects get more complex than can be handled by the small, agile team.
I have seem projects that scale to teams of independent developers, take a look at Ruby Forge, and imagine that each gem you install has a team of 10+ ruby developers. This argument is less about the technology and more about the packaging. Just like I might split up a Java effort across a set of separate projects and functional teams using something like Maven to manage the interdependencies and build process, I could do the same with a Ruby project and gems.
An important part of any web application is deployment. Most enterprises have QA and ops teams that know how to do Java. Changing the platform means changing what the developers, the QA and the ops teams do. This is a broader change than "you three guys go prototype this in Rails and if it looks good, we'll deploy it." The QA folks are expecting WAR files. The ops guys are expecting WAR files. Rails means Ruby and gems and rails and a c/c++ compiler and mongrel on *every* machine in the process from developer to deployment. This is a huge and costly burden and can often eclipse the cost of developing 1 or 2 apps 30% faster.
Social argument. By this logic you'll never move away from your current platform. Sorry guys, we can't use anything other than Java because the QA team only knows how to test Java. While both groups may specialize in push back, I think you'll find that both groups will welcome the change. For the QA team - if they are doing functional tests then the platform shouldn't make much difference. If you are working for a real enterprise, chances are good that you already have more than one platform to test, and if the QA is doing a good job, they have tools that can test applications at the protocol level and mimic the browser. Your ops team will probably fall down on the floor and thank you. Once you show them tools like Capistrano, you might even hear them asking why Java deployments can't be this easy.
Seriously, ever set up Tomcat and mod_jk? Or how about the false promise of hotdeploying a WAR (it rarely works because of screwy ClassLoader issues). Using Capistrano, we're literally talking about "deploy" and everything is automated remotely.
Finally, Rails does certain things very, very well. However, Rails is very weak in other areas. Writing multi-page "wizards" is easier in Java with Struts than it is in Rails. Managing complex state that does not directly map to tables in the database is more difficult in Rails than in J2EE.
Depends on the experience. Yeah, I think that hyper-AJAX is a little easier on Wicket, and if I were a Microsoft programmer, I'd probably say something similar about Atlas. But, I've seen plenty of people create wizards in Rails with less effort than it takes in Struts. Don't get me started on Struts, just go read my previous posts on OnJava.
For simple CRUD apps that can be written by a small team and deployed on an "off-grid" (e.g., intranet departmental server), Rails is a much better choice than Java. For big, hardcore apps, Java is a better choice.
Not so fast. I would have to agree that if you are building the mega-super-complex-enterprisy system, you probably don't want to use Rails. That's not what it's made for anyway.
So, for everyone who's about to flame me, "Yes, I use Rails."
Don't flame David, he's half right and I'm half wrong.
@ David P
"However, Rails is very weak in other areas. Writing multi-page "wizards" is easier in Java with Struts than it is in Rails."
Take a look at http://evang.eli.st/blog/2007/1/12/declarative-workflow-in-rails. I think you'll have a hard time doing the same thing more easily in Struts.
Gentlemen, this discussion is fantastic. I have been dealing with many of these same issues, and this conversation has given me a lot of new ideas to throw into the mix to get Ruby and also hopefully RoR accepted by my corporate masters.
Just to get back to a couple of points made in some of these comments, but not yet addressed by the group:
- What about the IIS deployment/Windows platform deployment issues
- What well as the soap4r performance problems (REXML really being to blame here)?
And has anyone mentioned the SQL Server integration challenges yet?
@Brian
Very nice declarative work flow example!
You can't answer to one myth with another. Your assumption, or perhaps implication, about performance is that .NET is faster than Java...which is dead wrong. You can't conclusively prove that the latest Java or .NET runtimes and containers are faster than the other. But I'd bet you that I could prove to you without a doubt that Java AND .NET are both faster than Ruby on Rails. So how about it? Are you willing to put your money where your mouth is?
Reading through this a second time, I don't think you know anything about how to build Java or .NET applications if you believe any of this yourself. Ruby on Rails allows you to challenge current thinking, like doing what makes sense rather than what the textbooks say. Why are you afraid to challenge standard practices without changing the platform?
@Yeah Right,
The "speed" issue is never about execution time, and it is always about scaleability. If baseline "execution time" were the measure that mattered we wouldn't be using .NET or Java for anything, we'd still be using C. I'm willing to put my money on the line and say, you can create a Rails site that scales for an investent comparable to what organizations pay to scale large enterprise Java or .NET systems.
Your discussion of the differences between .NET and Java don't make sense. I'm not making any comparison between the two.
Now can .NET and Java run quicksort more efficiently and quicker than Rails, sure. That's not my argument, my argument is that request time is rarely the issue - the issue is always scaleability AND the gating factor is never the server technology used, it is mostly the database. Furthermore, when companies get serious about scaleability that usually find a way to offload requests to static resources.
@Sheesh,
"Reading through this a second time, I don't think you know anything about how to build Java or .NET applications if you believe any of this yourself. Ruby on Rails allows you to challenge current thinking, like doing what makes sense rather than what the textbooks say. Why are you afraid to challenge standard practices without changing the platform?"
OK, so this is the "Why change platforms, we could just do the same thing in Java" argument. I'm not sure I follow this one, first, unless you intend to get into the framework invention business, there is nothing comparable to Rails in either .NET or Java. There are wannabes like Grails that are derivative (and badly so). Then there are true contenders like Rife which need more time if they are going to compete (and did I mention they don't have the community).
but, I don't follow the argument, especially the anti-intellectual appeal to Rails as an anti-textbook technology. What? Ruby is a programming language.
This discussion is more about opinions than about hard facts. If you are using a programming language or a particular framework and you are happy with it or have already invested a whole lot of time or money into it, there is no need to make the switch. Java, .NET, Ruby they are all great languages.
Ruby on Rails shines in rapid web development and integration of all the things you need when developing a web page. If you need to develop more complex task Java and .NET are probably more suitable. But for many projects Java and .NET can be too complex, if you don't have experienced developers. I'm glad I made the swith from PHP to Ruby on Rails, it has made my life a lot easier. I like Java and I'm also currently using it alongside Rails on my site http://www.railshostinginfo.com and they work nicely together. So it is just a matter of finding the right tools for the job.
Rails seems built for simple gui generation on top of services built in .NET or Java. As for the crud generation aspect, a zillion frameworks do that now, and some of those even include Ajax-y functions, so Rails 5 minutes are almost over.
It *does* matter that Ruby is slow. It is not a good general programming language. It's best at very small, very simple operations, and then speed doesn't matter.
@Nick,
Yes, this is opinon, that's why the post is categorized as opinion, and I'm glad you shared yours because it is one I'm in agreement with. I advocate a mixed approach - use Rails where it works, and use Java (or .NET) when you need to. This blog entry is more targetted at the organization that religiously clutches to a single platform.
> It *does* matter that Ruby is slow. It is not a good general
> programming language. It's best at very small, very simple
> operations, and then speed doesn't matter.
Funny, did you read the entry? Am I advocating that your Enterprise move everything to Rails? No.
I'm also pretty much convinced that anyone who says that "Ruby is not a good general programming language", probably hasn't given it a chance. As a language it seems much more capable than most, and just like Java hurried to play catch up with C#, we're seeing Java hurry to catch up with dynamic languages in general.
And, I know about other languages that received a similar reception. Among them - Java. Java was once considered a "slow language", and for the first few years it existed, people would scoff at the notion that Java could handle anything serious. IMO, the speed issue will be addressed (and I'm hoping that the speed issue is addressed when Ruby and Rucy on Rails runs in the JVM)
So when does a technology become serious enough?
> The QA folks are expecting WAR files. The ops guys are expecting WAR files.
That's a bit of a "tail wagging the dog" situation. Auto parts stores stock billions of today's parts, and car repair shops have lots of people who know how to fix today's cars. But Ford keeps coming out with new models year after year, and somehow the parts people and the repair people adapt. Surely we can expect the same from our QA and ops folks.
It would be interesting if anyone who is a current or former engineer at Revolution Health (http://www.revolutionhealth.com/) would comment. That's the only large, high-profile site built almost entirely in Ruby on Rails.
How do I cluster Rails? How does Rails scale to thousands (or tens of) of requests a second?
The answer: use Java.
Every major language has had the problems that are facing Ruby and Rails right now: when they first come out, they have to fight for every single inch of respect. The entire web development world is shaking right now as we strive (and are coming very close to attaining) to make using a service on the web just like using one installed on the PC, and there are a ton of frameworks/languages trying to come out as THE language that you should obviously use when developing.
I don't think that's ever going to happen. I think what will happen is the frameworks and languages will become ever closer to each other in both capabilities and speed. And beyond that, as is happening now with JRuby, you will be able to use both languages in the same context, to talk back and forth to each other. Everyone's happy! You can tie Rails onto the back of Java, use native threads, use whatever you need... they both work, and you get the best of both worlds.
The mingling of languages is what's really going to take off here soon... when you don't have to have only Java developers, or only Ruby developers on your team: you just specify certain methods of interaction required of any modules developed by either team, and they will be able to natively call each other's code.
Just imagine... all the development speed advantages of using Ruby, but with the underlying backing of things like Hibernate, etc. What won't we be able to accomplish then?
Umm, I think you missed some of the key requirements of a technology being deemed "enterprise" worthy... It has nothing to do with how fast I can get a simple screen interacting with a simple database. I can do the same thing in php.
"Enterprise" requirements revolve around security via various means of authentication / authorization as well as fine-grained ACLs and roles, distributed transaction management, EAI with legacy systems like CICS, messaging, etc... I can continue if you'd like...
An "enterprise" app isn't just about getting a screen to the user.
Rails has no answer in the enterprise space. Your arguments above aren't even mentioned when it comes to deciding on an enterprise platform...
@Jake, sure, alright, I'll make sure to tell that to the large enterprises that I know of who have already started to integrate Rails into enterprise systems.
It "seems" that rails does scale, if you chuck enough servers at it. As I state on my blog it would be nice to have a 'scale off' in terms of 'how many things you can serve with 5 machines using each language' or what not. That would be very interesting :) Let the best of each camp... http://betterlogic.com/roger/?p=58