I’ve become a huge fan of CircleCI—it’s the best CI tool for small-medium projects that I’ve found. Recently I ran into an issue setting up a new rails project with Postgres as the database backend with circle:
export RAILS_ENV="test" export RACK_ENV="test" bundle exec rake db:create db:schema:load --trace ** Invoke db:create (first_time) ** Invoke db:load_config (first_time) ** Execute db:load_config rake aborted! NameError: Cannot load `Rails.application.database_configuration`: uninitialized constant DATABASE_URL
However, when I looked at my
database.yml the constant
DATABASE_URL was clearly not being used.
DATABASE_URL was properly being used as the lookup string for an
# config/database.yml test: url: <%= ENV['TEST_DATABASE_URL'] %>
I was stumped for a while until I ssh’d into circle and noticed that somehow the single quotes were stripped from
# cat config/database.yml test: url: <%= ENV[DATABASE_URL] %> adapter: postgresql database: circle_ruby_test username: ubuntu host: localhost
Circle’s build inference process involves generating a
database.yml file which uses the original
database.yml file to some extent. Some part of the process involves stripping single quotes, which is what was causing the build breakage. Make sure that you use double quotes instead of single quotes in
database.yml when using CircleCI.
Automating Staging Deploys to Staging on CI Build Success
Here’s how to automatically push new builds (and run database migrations) to a heroku-hosted app using circle CI:
deployment: staging: branch: master commands: - heroku maintenance:on --app the-app-name - git push email@example.com:the-app-name.git $CIRCLE_SHA1:master - heroku run rake db:migrate --app the-app-name - heroku maintenance:off --app the-app-name