THANK YOU. I got a Camping app working on Heroku last year, and it was
great, but when I tried it again a few weeks ago with a new app, the way
I'd done it didn't work anymore and I never did figure it out. I'm very
grateful for some working instructions. :)
On 11/13/11 1:20 PM, Philippe Monnet wrote:
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
[email protected]
http://rubyforge.org/mailman/listinfo/camping-list
This body part will be downloaded on demand.
_______________________________________________
Camping-list mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/camping-list