I just had a ton of fun trying to deploy a Rails 3 app to a server. The server (Ubuntu Hardy...whatever version that is), had Rails 2.3.5 on it, and Ruby 1.8.6. I tried manually updating the gems, and of course it failed installing Rails 3 (required Ruby >= 1.8.7), so I decided to use RVM to get Ruby 1.9.2 running.
RVM installed fine, then I installed Ruby 1.9.2, then the Rails gems ( had some readline issues trying to get into the Rails console). I added Passenger (the server is running Apache, and was running a lower version of Passenger - v.2 something). That all worked. I was able to use capistrano to deploy my new version of my app.
(side note - rvm and it's files were installed locally into my home directory - I had to install passenger using the passenger-install-apache2-module script WITHOUT using sudo, so it would point to my rvm ruby... that all actually worked)
My issue now is dealing with the Gemfile on my local dev system and the deployed version now on the server. My local Mac is using sqlite and the production server is using MySql. The Ubuntu box had an issue installing the sqlite gem, and since the Gemfile specifies it, I was stuck. I tried using the note in the Gemfile about "groups" and did something like:
group :development do gem 'sqlite3-ruby', :require => 'sqlite3' gem 'mongrel','1.2.0.pre2' end group :production do gem 'mysql' end
but upon trying to run the app on the server, it got an error saying sqlite3 wasn't available. I logged into the server and tried using the Bundle command to get it set up.. but it still tried to install sqlite...even if I set RAILS_ENV=production. The only thing I did that seemed to work was to manually, on the server, in the 'current'ly deployed app, do bundle install --without development
So... What's the magic that I have to do with Capistrano and the Gemfile to use the correct gems in production? I saw this morning a post about adding a line to my deploy.rb file:
require 'bundler/capistrano'
but... will that do it? Do I have to add something to my deploy.rb script to make sure my gems.. proper for my environment... are set up?
I was able to get my app running in production by manually editing the Gemfile on the server to remove the sqlite lines. And if I have any changes I need to make to the app.. I've editing the files directly. I would love to just do a cap deploy.. but that will break! (Not to mention, having the gem 'mysql' in the Gemfile on my dev system fails, because I don't have the mysql gem installed...) Nice catch-22 there!
Any info would be highly appreciated.
Thanks.