Here is my recipe:

1. Setup up up your Gems prerequisites: create a .gems file in the root folder and list each gem version on a separate line. E.g.:

    rack --version '>= 1.2.1'
    markaby --version '= 0.5'
    camping --version '>= 2.1'

2. Create a RackUp script: create a config.ru file (still in the root folder) for Rack's configuration. In this example myapp.rb has a main module named MyApp:

    # config.ru

%w(rack activerecord camping camping/session camping/reloader ).each { | r | require r}
    require 'myapp.rb'
    run MyApp

3. Configure routes for your static assets: if you need to serve static files from specific directories, add the following statements to config.ru:

    use Rack::Reloader
    use Rack::Static,
    :urls => [ '/css',
                   '/js',
                   '/images' ],
    :root => File.expand_path(File.dirname(__FILE__))

Note: If you need additional Rack modules insert the corresponding statements there too.

4. Setup your application configuration: I'd recommend that the various configuration files you need get grouped together into a ./config folder. Example:

    ./config
        database.yml
        some.yml
        ...

Important: Do not add the database.yml file to Git so that it does NOT get pushed to Heroku. When you first deploy to Heroku, the database.yml file will automatically be generated to reflect the internal name that Heroku will assign. So your main module should connect to the database like so:

    dbconfig = YAML.load(File.read('config/database.yml'))
    environment = ENV['DATABASE_URL'] ? 'production' : 'development'
    Camping::Models::Base.establish_connection  dbconfig[environment]

This allows you to use your local (git-unaware) database.yml when developing and the official Heroku version when hosted.

5. Tweak your code for PostgreSQL when migrating your SQLite database to PostgreSQL: take into account a stricter GROUP BY clause. PostgreSQL requires all resulting columns from a SELECT ... GROUP BY to be explicitly defined.
In other words if you have the following SQLite query:
    SELECT *
    FROM widgets
    GROUP BY category
You will need to rewrite like so:
    SELECT id, category, description
    FROM widgets
    GROUP BY category, category, description

Hope that helps.

Philippe

On 11/13/2011 10:27 AM, Piotr S wrote:
Well yeah. I know about the gems and configu.ru <http://configu.ru>.
It's the magic part of switching between databases that really gives me the mental workout. I'm looking for some working solutions to a problem that I'd imagine most of the Camping hackers face because where else could we possibly deploy our apps if not on heroku?

    You just need a .gems file (containing list of gems you use, one per
    line) and a config.ru <http://config.ru> file like this:

    require './my_app.rb'
    run MyApp

    (both in the root of the repo).

    Create them both, commit and it should start working. (You'll
    obviously also have to do some magic to switch to postgres, as you
    noticed.)

     -- Matma Rex




_______________________________________________
Camping-list mailing list
Camping-list@rubyforge.org
http://rubyforge.org/mailman/listinfo/camping-list

_______________________________________________
Camping-list mailing list
Camping-list@rubyforge.org
http://rubyforge.org/mailman/listinfo/camping-list

Reply via email to