• Grayson Wright's avatar
    Improve heroku deploy workflow · 4c7e5a0b
    Grayson Wright authored
    Problem:
    --------
    
    With the git subtree strategy adopted in #144,
    there are several unconventional things
    surrounding the heroku deploy process:
    
    - Pushing to heroku requires a `git subtree` command
    - We need special logic in the Gemfile in order to run the demo app
      locally with our local version of Administrate.
    - `rake` and `rails` commands need to be run from the
      `spec/example_app` subdirectory.
    
    In addition, there is a dependency problem between the example app
    and the master branch of administrate on github.
    The example app needs to pull the master branch
    as a dependency on heroku,
    but the `Gemfile.lock` locks it in to a specific version.
    
    It is impossible to point the `Gemfile.lock`
    at the repo's current commit,
    because that would require a new commit
    before we could deploy to Heroku.
    
    The result would be that the branch on Heroku would always differ
    from the branch on GitHub by at least one commit,
    and we would need to develop special tooling around pushing to heroku.
    
    Solution:
    ---------
    
    Make the `rails`, `rake`, and `bundle exec` commands work
    from the root directory of the repository.
    This involved:
    
    - Move the `config.ru` script to the root of the repo
    - Update `rake` and `rails` binstubs to reference nested rails app
    - Move `unicorn.rb` (required by Procfile) to top-level `config` dir
    - Combine both Gemfiles into a single one, at the root of the repo
    - Remove spring for simplicity
    - Remove unused rake tasks
    
    I tested the following tasks.
    All work from the root directory of the repo:
    
    - deploy to heroku: `git push heroku master`
    - run server locally: `rails server` or `foreman start`
    - seed demo database: `rake db:seed`
    - migrate demo database: `rake db:migrate`
    - reset demo database: `rake db:drop db:create`
    - run rails generators:
      - `rails generate administrate:field FooBar`
      - I was pleasantly surprised that this placed the files
        in the correct `spec/example_app` subdirectory
    - access demo app console:: `rails console`
    - view demo app routes: `rake routes`
    - appraisal test suite: `bundle exec appraisal rake`
    
    References:
    -----------
    
    http://stackoverflow.com/questions/3081699/deploy-a-subdirectory-to-heroku
    4c7e5a0b