# Jetfuel [![Build Status](https://secure.travis-ci.org/thoughtbot/suspenders.png?branch=master)](http://travis-ci.org/thoughtbot/suspenders) Jetfuel is the base Rails application used at [flyoverworks](http://flyoverworks.com/). Installation & New App Creation ------------ First, install the gem: gem install jetfuel Then run: jetfuel projectname This will create a Rails app in `projectname` using the latest version of Rails. By default this script creates a new git repository. See below if you want to use it against an existing repo. Set Up Existing App ---------- Get the code. git clone git@github.com:organization/app.git Set up the app's dependencies. cd project ./bin/setup Use [Heroku config](https://github.com/ddollar/heroku-config) to get `ENV` variables. heroku config:pull --remote staging Delete extra lines in `.env`, leaving only those needed for app to function properly. For example: `BRAINTREE_MERCHANT_ID` and `S3_SECRET`. Use [Foreman](https://github.com/ddollar/foreman) to run the app locally. foreman start It uses your `.env` file and `Procfile` to run processes just like Heroku's [Cedar](https://devcenter.heroku.com/articles/cedar/) stack. Gemfile ------- To see the latest and greatest gems, look at Jetfuel's [Gemfile](templates/Gemfile.erb), which will be appended to the default generated projectname/Gemfile. It includes application gems like: * [Airbrake](https://github.com/airbrake/airbrake) for exception notification * [Bourbon](https://github.com/thoughtbot/bourbon) for Sass mixins * [Twitter Bootstrap](https://getbootstrap.com) for scaffold application styles * [Leather](https://github.com/dvanderbeek/leather) for Devise with styled views, a bootstrap UI Kit page, and some useful bootstrap component helpers * [Sidekiq](https://github.com/mperham/sidekiq) for background job processing * [Email Validator](https://github.com/balexand/email_validator) for email validation * [Flutie](https://github.com/thoughtbot/flutie) for and `body_class` view helper * [High Voltage](https://github.com/thoughtbot/high_voltage) for static pages * [jQuery Rails](https://github.com/rails/jquery-rails) for jQuery * [Postgres](https://github.com/ged/ruby-pg) for access to the Postgres database * [Rack Timeout](https://github.com/kch/rack-timeout) to abort requests that are taking too long * [Recipient Interceptor](https://github.com/croaky/recipient_interceptor) to avoid accidentally sending emails to real people from staging * [Simple Form](https://github.com/plataformatec/simple_form) for form markup and style * [Title](https://github.com/calebthompson/title) for storing titles in translations * [Unicorn](https://github.com/defunkt/unicorn) to serve HTTP requests And gems only for staging and production like: * [New Relic RPM](https://github.com/newrelic/rpm) for monitoring performance * [Rails 12 Factor](https://github.com/heroku/rails_12factor) to make running Rails 4 apps easier on Heroku And development gems like: * [Dotenv](https://github.com/bkeepers/dotenv) for loading environment variables * [Pry Rails](https://github.com/rweng/pry-rails) for debugging * [Spring](https://github.com/rails/spring) for fast Rails actions via pre-loading And testing gems like: * [Capybara](https://github.com/jnicklas/capybara) and [Poltergeist](https://github.com/teampoltergeist/poltergeist) for integration testing * [Guard](https://github.com/guard/guard-rspec) for automatically running your specs * [Factory Girl](https://github.com/thoughtbot/factory_girl) for test data * [Formulaic](https://github.com/thoughtbot/formulaic) for integration testing HTML forms * [RSpec](https://github.com/rspec/rspec) for unit testing * [RSpec Mocks](https://github.com/rspec/rspec-mocks) for stubbing and spying * [Shoulda Matchers](https://github.com/thoughtbot/shoulda-matchers) for common RSpec matchers * [Timecop](https://github.com/jtrupiano/timecop-console) for testing time Other goodies ------------- Jetfuel also comes with: * The [`./bin/setup`][bin] convention for new developer setup * Rails' flashes set up and in application layout * A few nice time formats set up for localization * `Rack::Deflater` to [compress responses with Gzip][compress] * [Fast-failing factories][fast] * A [low database connection pool limit][pool] * [Safe binstubs][binstub] * [t() and l() in specs without prefixing with I18n][i18n] * An automatically-created `SECRET_KEY_BASE` environment variable in all environments. * Configuration for [Travis Pro][travis] continuous integration. * The analytics adapter [Segment.io][segment] (and therefore config for Google Analytics, Intercom, Facebook Ads, Twitter Ads, etc.). [bin]: http://robots.thoughtbot.com/bin-setup [compress]: http://robots.thoughtbot.com/content-compression-with-rack-deflater/ [fast]: http://robots.thoughtbot.com/testing-your-factories-first [pool]: https://devcenter.heroku.com/articles/concurrency-and-database-connections [binstub]: https://github.com/thoughtbot/suspenders/pull/282 [i18n]: https://github.com/thoughtbot/suspenders/pull/304 [travis]: http://docs.travis-ci.com/user/travis-pro/ [segment]: https://segment.io Heroku ------ You can optionally create Heroku staging and production apps: jetfuel app --heroku true This: * Creates a staging and production Heroku app * Sets them as `staging` and `production` Git remotes * Configures staging with `RACK_ENV` and `RAILS_ENV` environment variables set to `staging` Capistrano ---------- You can optionally install capistrano if you are deploying to a VPS like Digital Ocean: jetfuel app --capistrano true This: * Adds capistrano and capistrano-rails to your gemfile * Adds capistrano configuration files that should work with rails-fed-chef You will need to tell the generator what your github repository and the IP address for your server are. Otherwise, you'll need to update those values in `config/deploy.rb` and `config/deploy/production.rb` when you have everything set up. Git --- This will initialize a new git repository for your Rails app. You can bypass this with the `--skip-git` option: jetfuel app --skip-git true GitHub ------ You can optionally create a GitHub repository for the suspended Rails app. It requires that you have [Hub](https://github.com/github/hub) on your system: curl http://hub.github.com/standalone -sLo ~/bin/hub && chmod +x ~/bin/hub jetfuel app --github organization/project This has the same effect as running: hub create organization/project Dependencies ------------ Jetfuel requires the latest version of Ruby. Some gems included in Jetfuel have native extensions. You should have GCC installed on your machine before generating an app with Jetfuel. Use [OS X GCC Installer](https://github.com/kennethreitz/osx-gcc-installer/) for Snow Leopard (OS X 10.6). Use [Command Line Tools for XCode](https://developer.apple.com/downloads/index.action) for Lion (OS X 10.7) or Mountain Lion (OS X 10.8). PostgreSQL needs to be installed and running for the `db:create` rake task. Issues ------ If you have problems, please create a [GitHub Issue](https://github.com/thoughtbot/suspenders/issues). Contributing ------------ To update Jetfuel's Ruby version, change `.ruby-version` and `.travis.yml`. Please see CONTRIBUTING.md for further details. Credits ------- Jetfuel is a for of thoughtbot's suspenders gem and is maintained by [FlyoverWorks, inc](http://flyoverworks.com/). License ------- Jetfuel is Copyright © 2014 FlyoverWorks. It is free software, and may be redistributed under the terms specified in the LICENSE file.