 <p>A common approach that works well is to use a work queue like <a href="https://github.com/defunkt/resque/" rel="nofollow">Resque</a>.</p> <p><strong>Managing the code</strong><br/> For ease of management, keep the processing code and the app "in the app". Deploy two app-servers but run resque workers on the processing server.</p> <p><strong>State changes</strong><br/> If the processing jobs relate to ActiveRecord persisted objects you can poll state from the front-end and periodically update it from the backend during the encoding process.</p> <p>You might find it useful to use <a href="https://github.com/pluginaweek/state_machine" rel="nofollow">state machine</a>.</p> <p><strong>Your problems have moved</strong><br/> Now you're cloud-scale&trade; :D More processing hosts running workers can be added if your queue gets too long. If your front-end is the only web-accessible host you can set up a rack middleware or run rainbows to proxy the processed results through the frontend to the client.</p> <p>Sounds like an interesting project. Good luck!</p>