This is just a quick guide on how to create a test/staging environment with Heroku.
-- Create staging environment
heroku create --remote staging
-- Push to staging app
heroku push staging master
-- Run rake db:migrate on staging app
heroku run rake db:migrate --remote staging
-- Add pgbackups add ons
heroku addons:add pgbackups --remote staging
heroku addons:add pgbackups --remote heroku
-- Create backup of production data
heroku pgbackups:capture --remote heroku
-- Copy to staging environemnt
heroku pgbackups:restore DATABASE `heroku pgbackups:url --remote heroku` --remote staging
-- Create a new config file called staging.rb (/config/environments/staging.rb)
-- Add environment variables
heroku config:add RACK_EVN=staging RAILS_ENV=staging --remote staging
-- Ready to go !
For those of you using git branches etc, the following may come in handy as well:
-- Create local development branch
git branch development
-- Switch to dev branch
git checkout development
-- Make your changes and commit them
git add .
git commit -m "My changes"
-- Push to staging environment (local development branch to staging environment master branch)
git push staging development:master
If you run into any trouble, I found the following links pretty helpful:
I was going through my development logs today and noticed that the following line was appearing everywhere:
WARN Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
While nothing appeared to be wrong, it made the logs a lot harder to read. A stackoverflow post indicates that this is a webrick issue that can be avoided by switching to thin. This is also the recommended option for heroku. In order to use thin, you simply need to add it to your Gemfile:
chris@chris-VirtualBox:~/calendar$ bundle install
Fetching gem metadata from https://rubygems.org/...........
Fetching gem metadata from https://rubygems.org/..
Using rake (10.0.2)
Using i18n (0.6.1)
Using multi_json (1.4.0)
Using activesupport (3.2.9)
Using builder (3.0.4)
Using activemodel (3.2.9)
Using erubis (2.7.0)
Using journey (1.0.4)
Using rack (1.4.1)
Using rack-cache (1.2)
Using rack-test (0.6.2)
Using hike (1.2.1)
Using tilt (1.3.3)
Using sprockets (2.2.2)
Using actionpack (3.2.9)
Using mime-types (1.19)
Using polyglot (0.3.3)
Using treetop (1.4.12)
Using mail (2.4.4)
Using actionmailer (3.2.9)
Using arel (3.0.2)
Using tzinfo (0.3.35)
Using activerecord (3.2.9)
Using activeresource (3.2.9)
Using bcrypt-ruby (3.0.1)
Using bundler (1.2.3)
Using coffee-script-source (1.4.0)
Using execjs (1.4.0)
Using coffee-script (2.2.0)
Using rack-ssl (1.3.2)
Using json (1.7.5)
Using rdoc (3.12)
Using thor (0.16.0)
Using railties (3.2.9)
Using coffee-rails (3.2.2)
Installing daemons (1.1.9)
Installing eventmachine (1.0.0) with native extensions
Using jquery-rails (2.1.4)
Using libv8 (126.96.36.199)
Using pg (0.14.1)
Using rails (3.2.9)
Using sass (3.2.3)
Using sass-rails (3.2.5)
Using therubyracer (0.10.2)
Installing thin (1.5.0) with native extensions
Using uglifier (1.3.0)
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
And finally start thin:
chris@chris-VirtualBox:~/calendar$ rails s thin
=> Booting Thin
=> Rails 3.2.9 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
>> Thin web server (v1.5.0 codename Knife)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop
Next time I do an install I’ll try to document the whole thing, but for now that link is probably one of the better/simpler guides I’ve come across. If you have any problems please leave a comment below and I’ll try to get back to you.
Just an error I ran into while running bundle install on a new ubuntu virtual:
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
checking for sqlite3.h... no
sqlite3.h is missing. Try 'port install sqlite3 +universal'
or 'yum install sqlite-devel' and check your shared library search path (the
location where your sqlite3 shared library is located).
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.
Provided configuration options:
Ran into the following issue today starting a new app on a virtual Ubuntu box:
Thankfully there’s a quick fix, simply install nodejs:
chris@chris-VirtualBox:~/Desktop$ sudo apt-get install nodejs
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
libc-ares2 libev4 libv8-188.8.131.52
The following NEW packages will be installed:
libc-ares2 libev4 libv8-184.108.40.206 nodejs
0 upgraded, 4 newly installed, 0 to remove and 77 not upgraded.
Need to get 1,938 kB of archives.
After this operation, 6,066 kB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://au.archive.ubuntu.com/ubuntu/ oneiric/universe libv8-220.127.116.11 i386 18.104.22.168-1ubuntu2 [1,386 kB]
Get:2 http://au.archive.ubuntu.com/ubuntu/ oneiric/main libc-ares2 i386 1.7.4-1 [37.3 kB]
Get:3 http://au.archive.ubuntu.com/ubuntu/ oneiric/universe libev4 i386 1:4.04-1 [29.5 kB]
Get:4 http://au.archive.ubuntu.com/ubuntu/ oneiric/universe nodejs i386 0.4.9-1ubuntu3 [486 kB]
Fetched 1,938 kB in 18s (106 kB/s)
Selecting previously deselected package libv8-22.214.171.124.
(Reading database ... 158699 files and directories currently installed.)
Unpacking libv8-126.96.36.199 (from .../libv8-188.8.131.52_184.108.40.206-1ubuntu2_i386.deb) ...
Selecting previously deselected package libc-ares2.
Unpacking libc-ares2 (from .../libc-ares2_1.7.4-1_i386.deb) ...
Selecting previously deselected package libev4.
Unpacking libev4 (from .../libev4_1%3a4.04-1_i386.deb) ...
Selecting previously deselected package nodejs.
Unpacking nodejs (from .../nodejs_0.4.9-1ubuntu3_i386.deb) ...
Processing triggers for doc-base ...
Processing 1 added doc-base file...
Registering documents with scrollkeeper...
Processing triggers for man-db ...
Setting up libv8-220.127.116.11 (18.104.22.168-1ubuntu2) ...
Setting up libc-ares2 (1.7.4-1) ...
Setting up libev4 (1:4.04-1) ...
Setting up nodejs (0.4.9-1ubuntu3) ...
update-alternatives: using /usr/bin/node to provide /usr/bin/js (js) in auto mode.
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place