RickBacci
9/19/2015 - 10:14 PM

new_rails_app.rb

rails new myapp -T --database=postgresql

# Gemfile

source 'https://rubygems.org'

ruby '2.2.2'

gem 'rails', '4.2.4'
gem 'pg'

gem "haml-rails", "~> 0.9"
gem 'sass-rails', '~> 5.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'

gem 'bootstrap-sass', '~> 3.2.0'
gem 'autoprefixer-rails'

gem 'uglifier', '>= 1.3.0'
gem 'puma'
gem 'figaro'

gem 'github_api'

group :development, :test do
  gem 'byebug'
  gem 'pry'
  gem 'better_errors'
  gem 'binding_of_caller'
  gem 'rspec-rails', '~> 3.0'
end

group :test do
  gem 'vcr'
  gem 'webmock'
  gem 'simplecov', :require => false
  gem 'database_cleaner'
  gem 'capybara'
  gem 'launchy'
end

gem 'rails_12factor', group: :production

# command line

bundle exec figaro install
rails generate rspec:install
rails generate haml:application_layout convert
rake haml:erb2haml ### if erb views are already generated

# rails_helper

require 'capybara/rails’
require 'database_cleaner'

# Database Cleaner

http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/

First of all, and this is very important, go into spec/spec_helper.rb and change this line:

config.use_transactional_fixtures = true
To:

config.use_transactional_fixtures = false
This will disable rspec-rails’ implicit wrapping of tests in a database transaction. Without disabling this, none of the following configuration will matter.

Now configure database_cleaner. I usually create a separate file called spec/support/database_cleaner.rb for this. Inside, I put something like this:

RSpec.configure do |config|

  config.before(:suite) do
    DatabaseCleaner.clean_with(:truncation)
  end

  config.before(:each) do
    DatabaseCleaner.strategy = :transaction
  end

  config.before(:each, :js => true) do
    DatabaseCleaner.strategy = :truncation
  end

  config.before(:each) do
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end

end

# Puma server

Procfile
web: bundle exec puma -C config/puma.rb

config/puma.rb

workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['MAX_THREADS'] || 5)
threads threads_count, threads_count

preload_app!

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'

on_worker_boot do
  # Worker specific setup for Rails 4.1+
  # See: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot
  ActiveRecord::Base.establish_connection
end


# Bootstrap

gem 'bootstrap-sass', '~> 3.3.5'
gem 'sass-rails', '>= 3.2'

bundle install and restart your server to make the files available through the pipeline.

Import Bootstrap styles in app/assets/stylesheets/application.scss:

// "bootstrap-sprockets" must be imported before "bootstrap" and "bootstrap/variables"
@import "bootstrap-sprockets";
@import "bootstrap";

bootstrap-sprockets must be imported before bootstrap for the icon fonts to work.

Make sure the file has .scss extension (or .sass for Sass syntax). If you have just generated a new Rails app, it may come with a .css file instead. If this file exists, it will be served instead of Sass, so rename it:

$ mv app/assets/stylesheets/application.css app/assets/stylesheets/application.scss

Then, remove all the //= require and //= require_tree statements from the file. Instead, use@import to import Sass files.

Do not use //= require in Sass or your other stylesheets will not be able to access the Bootstrap mixins or variables.


Require Bootstrap Javascripts in app/assets/javascripts/application.js:

//= require jquery
//= require bootstrap-sprockets

bootstrap-sprockets and bootstrap should not both be included in application.js.

bootstrap-sprockets provides individual Bootstrap Javascript files (alert.js or dropdown.js, for example), while bootstrap provides a concatenated file containing all Bootstrap Javascripts.

auto-prefixer gem

heroku create app

figaro heroku:set -e production


# in spec_helper.rb

require 'simplecov'
SimpleCov.start 'rails'

require 'vcr'
require 'webmock/rspec'

VCR.configure do |config|
  config.hook_into :webmock
  config.cassette_library_dir = 'spec/support/vcr_cassettes'

  # config.configure_rspec_metadata!

  config.default_cassette_options = { serialize_with: :json }

  config.before_record do |r|
    r.request.headers.delete("Authorization")
  end
end