Question

We are developing an application that has an iPhone client, and a Rails server. We have released a first version, and are now starting to work on 1.1 version. We were wondering if there are any tools (external or provided by hostingrails) to address those two basic requirements: - development / production versions of a Rails application - simultaneous live versions of the application (versioned APIs) for example to keep supporting older versions of the client application iPhone.

A first approach we are thinking of right now would be to duplicate the application for each version of the API we want to have, each of them being referenced by a specific URL for example: myapp.com/v1 , myapp.com/v2 ... This entire stack would itself be duplicated in order to have a live/production version, and a development one. Once tested, the development version would be switched with the production version.

What do you think of this approach ? Are there any tools that allow to manage the lifecycle of the application ? Does Rails has built-in features facilitating this ?

Thanks

Was it helpful?

Solution

The simplest thing would just be to keep your API backward-compatible, thus obviating the need to maintain two versions of the API, and if you must evolve it in a way that breaks backwards compatibility, deprecate the old API and give it a real termination date so that you don't support it ad infinitum.

If you absolutely have to go down this road, read Fowler's blog post on the topic first (http://martinfowler.com/bliki/TolerantReader.html) and then look at namespacing your API routes. In Rails you could accomplish this using namespaced routes and controllers, so you might have your original api at /application/endpoint and your new version at /application/v2/endpoint (I'm assuming that you can't change your endpoints for old clients easily)

I'm not aware of any tools that explicitly claim to solve the problems you're saying you want to solve, but I think that has more to do with developers working hard not to need them than the idea that they're not solvable in Rails.

OTHER TIPS

Did you consider using Subdomains?: http://railscasts.com/episodes/221-subdomains-in-rails-3

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top