Evaluating RubyMine IDE for Rails Development
I have spent roughly the last month using the RubyMine IDE for about 80%+ of my daily development work. I initially grabbed it to try out the debugger on a particularly nasty problem, and then decided to give it a real evaluation. My daily work is on DealBase, and covers the full spectrum of Rails development. The testing was done mostly using a quad-core Mac Pro with 8GB of RAM and 30" and 24" monitors (dual monitor setup), with RubyMine running essentially full screen on the 30". I also did some work on my MacBook Pro (Core 2 Duo, 4GB RAM). Both machines use Snow Leopard. My current and longtime editor has been TextMate, although I have far more time spent historically in environments like Visual C++/Studio, IDEA, a bit of time in Eclipse, a bit in Emacs, BBEdit, CodeWarrior, regularly use Vim, etc. To date, the speed and light weight of TextMate, combined with it's slick column editing feature (that's one killer feature), have kept me from switching. But, there may be some movement here...
- Debugger, oh, to have a real debugger back, is quite nice. This is what motivated me to try it to begin with. Super easy to setup and get working to, basically no effort at all, which is much appreciated (but do need to see if can be done with Passenger setup instead of Mongrel, since we don't use Mongrel). I've used command line ruby debugger, but once you've used a solid GUI debugger, the command line ones are just such an inferior way to work.
- Really like how it puts the folder name in front of the file name when there are multiple files in the project with that name
- Puts squiggles under misspellings or other code errors - quite handy. It also puts this under the file's name in its tab, so you can quickly see which files you have open that have errors in them.
- Hold Cmd while hovering over the name of a partial or similar, and then click to open that file
- Word selection via double click includes the "@" on field names for Ruby code
- It's quite smart about correlating Cucumber step statements to their definitions: it will actually show you a step statement doesn't match when that non-match is because the regex in your definition is not matching. For example, if you had something like "from (\w+ airport)" in your definition, but you put "from San Francisco airport", it wouldn't match, and RubyMine figures this out (I'm impressed!)
- Having an irb or script/console REPL avail right there is quite nice. I'm still experimenting with whether I organize my windows such that this is always at the front or not.
- I'm just starting to get used to using them, but the "view for" and "action for" little markers in the gutter of controller/view files will take you to the corresponding view/action, a nicety.
- TextMate bindings didn't map Cmd-Enter the way TextMate did. Remapped it and it works fine now.
- Doesn't work (well) with MacOS X Spaces - prevents switching to another space when you select another app
- Sometimes grinds to a halt while it re-parses your project or what not
- File tabs:
- They go to multiple rows too easily.
- They just don't look right/good. I'm not sure if it's because they're non-native tabs or what.
- I understand, but don't like how the rows swap when you change to a different tabs. You lose track of where a file is in the tabs.
- You can't really just open up an empty, new window at whim. I use this a lot as a scratch pad type of thing in TextMate.
- Find in project is nowhere near as fast, or presented as usefully as Ack in Project for TextMate. It does provide more options, such as filtering files by directory or type and so on, but the speed is generally far more important.
- Too slow on a MacBook Pro 2.4GHz Intel Core 2 Duo with 4GB RAM - too many operations seemed to bring it (and my machine) to its knees. Seems ok on my quad-core tower with 8GB RAM.
- GoTo File (Cmd-T in TextMate) is odd in that it'll match to image files. I would expect these to be automatically culled out (they are in TextMate), as I'm not looking to open some PNG file for editing.
- Also seems to crash enough that it bothers me. I can tolerate an occasional crash, although with TextMate I've run it for weeks on end with no crash, using it constantly. I've had several either hangs or crashes with RubyMine in the short couple weeks I've been trying it out.
- Can't run parallel specs/cucumber in it and get the proper processing/handling. Our test suite is extensive enough, or well, takes long enough to run, that I really need to take advantage of multi-core machines and run this stuff in parallel. It'd be awesome if they could integrate parallel specs.
- "Synchronize files on frame activation" doesn't work, or doesn't do what I thought: have to tell it to reload log files from disk. Even closing the tab for the file, and re-opening it, doesn't re-synchronize it from disk. This really sucks when viewing log files, and is not even good for regular files - prompt me if the file changes on disk and see what I want to do, before I've spent a lot of time editing something only to realize I was editing a stale version.
- Has Google Chrome browser listed in Web Browsers prefs, but I can't select it or type in its location, etc.
- Has the usual Java UI ugliness - Java file dialogs instead of native dialogs (and thus you see files and stuff you wouldn't normally see - not all bad, but ugly), just doesn't look nearly as good as a native app.
- If I specify WebKit as my browser (which gets opened when starting to debug), a) it doesn't bring it to front, and b) it gets the URL wrong. I see this in the address bar: "file:///Applications/RubyMine%202.0.app/bin/http:/0.0.0.0:3000" I fared better with Chrome, but it launches a second instance of Chrome (not just a separate window, an actual separate app process). This may be a Chrome behavior though?
- I added a Tool for "/bin/zsh -i" to have just a regular shell in side, but the coloring and various escape codes and such don't work, and that winds up breaking enough stuff for me (that I don't want to re-jigger for this), that that's a downer. I'd hoped that I could sort of just "live" in the IDE, like many Emacs users do.
- Column editing is partly there, but not as good as TextMate. If you make a column selection, and then hit paste, it doesn't replace it, it just inserts your paste at the end. This makes it hard to say bulk rename something that's aligned vertically.
- The refactoring bits were just ok. This is a really hard feature in general though. Simple refactorings I used, like renaming a method worked fine. But, changing the name of a model class did about 1/4 of the work needed and was questionable as to whether it was an advantage over just doing it all myself. It got all the obvious, low-hanging fruit, but it seemed to completely ignore Rails helpers and views. It misses a bunch of things that I'm not surprised at of course, such as table names in SQL conditions (e.g. in named_scopes), model name used anywhere in JavaScript or CSS (which isn't uncommon in Rails code), and then the one that I'd like to see it do a better job on, but that is hard of course is on associations. So, in my application, I was refactoring our "Deal" model to be "HotelDeal". We have a "Hotel" model and it has_many deals. Thus in the code you'd routinely see things like "hotel.deals" to reference that association. It didn't handle any of those. Not surprising, but starts to devalue the refactoring feature.
- Their TextMate keybindings don't get Cmd-Enter right, but you can fix it. You can remap the keys for "Split Line" and "Start New Line" (swap the two for example - "Start New Line" is the one you want to be Cmd-Enter).
- I'm not quite willing to call this a con, but I find that I still prefer to use GitX to review and commit my code, instead of what's built in to RubyMine. GitX has a nicer UI for it, just seems more straightforward, etc. But, it is at least quite nice to have Git support right in RubyMine. The two key changes I'd like to see that would potentially fix this for me, would be to show diffs by simply selecting one of the changed files (just like GitX does). This is key for me because I review all code changes prior to a commit. Second would be to show what branch I'm on. I always work on a branch, and it's nice to see the branch as a double-check prior to committing.
- Hoping for a TextMate theme importer (I think that's coming?), so I can import my customized Argonaut theme.