Danny Burkes's blog
Interesting
RSpec 2.5, Capybara, and Selenium
Capybara, Selenium, and RSpec's request specs play nicely together, and you can even run tests that require javascript, using the :js => true option.
However, doing do requires the very latest Capybara, so be sure to specify the :git option in your Gemfile.
Ryan Bates has done an excellent RailsCasts episode on just this.
Interesting
SFRuby Hack Nights
The San Francisco Ruby Meetup Group is hosting a hack night tonight. See the website for details.
Named scopes and includes
A pivot noted that, after an association was loaded via :include, application of a named scope to the association will result in a new query.
The moral- sometimes an :include is less efficient than loading the association separately. Mind your logs.
WADL
A pivot remarked on the existence of WADL, a sort-of SOAP-less version of WSDL, where you can describe a REST API in XML for machine consumption.
It's 100% less SOAPy, but still just as <tag>gy.
Interesting
RVM local/server version mismatch
A pivot noted that if you are using RVM in both your development and production environments, and you are using Capistrano for deployment, that you could encounter weird errors at deploy time like:
99: rvm_error: command not found
** [out :: app_user] /home/app_user/.rvm/scripts/rvm: line
121: __rvm_conditionally_add_bin_path: command not found
** [out :: example.com] /home/app_user/.rvm/bin/rvm-shell: line
26: rvm: command not found
These errors occur even after you follow the instructions at http://rvm.beginrescueend.com/integration/capistrano/.
The moral- make sure your RVM version numbers match in development and production.
Ask for Help
Recurring jobs
A pivot asked "what is the current state of the art in scheduling recurring processes?"
The first-order answer was simply "cron", but then the conversation got interesting.
Cron has a few downsides-
- Each task execution has to re-load the entire ruby/rails runtime, so, you pay a significant penalty in terms of startup time
- Crontabs often don't get checked into source control, so there ends up being little visibility into which jobs are running when
One suggestion to solve the visibility problem was to use the whatever gem, which allows you to express your cron schedules in a ruby DSL that can easily be kept in source control.
A suggested alternative that eliminates cron altogether is resque-scheduler with resque.
The upsides with resque-based scheduling are that all your schedule logic is expressed in ruby, and you don't pay the ruby/rails startup penalty for each worker.
The downside is that it adds additional operational infrastructure for you to manage (the resque workers and the redis server(s)).
Interesting Things
Rails 2.3.8 is out, fixing HAML compatibility and no longer inadvertently requiring rails_xss.
RailsBridge Open Workshop Project is hosting Mighty Ruby Tuesday tonight in San Francisco. RailsBridge puts on workshops around San Francisco (and last week, in New York) that give women a safe place to learn programming, or if they're already programmers, learn Ruby. Pivotal is a sponsor and we support this important effort to bring gender parity to the Rails community.
Ask for Help
Identify and uploaded files
Running identify on uploaded files sometimes fails, because by the time identify gets hold of the file, the file extension has been lost (it has been written to /tmp or the like).
The suggested workaround was to see if the filename specified in the Content-Disposition header, if present, could be carried through to the temporary file.
Interesting Things
Amazon has recently introduced a reduced-durabilty pricing tier for S3 storage, with significant discounts available to those who can live with 4 9's versus 11 9's of reliability. This seems like a win for things like thumbnails, which can easily be re-created from the originals on the off chance that they were actually lost by S3.
Rails 2.3.7 is out, but it doesn't play nice with HAML just yet. Projects using HAML should avoid upgrading until those incompatibilities are ironed out.
