From 17e1c4b1b9cc605fdd16ce5a02ae95236935a054 Mon Sep 17 00:00:00 2001 From: Mikena Wood Date: Sun, 28 Jan 2018 16:40:08 -0800 Subject: [PATCH 01/10] add docker configs --- Dockerfile | 19 +++++++++++++++++++ config/database.yml | 18 +++++++++++------- docker-compose.yml | 13 +++++++++++++ 3 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..a6834d32 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,19 @@ +FROM ruby:2.3.1 +RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs +ENV PHANTOM_JS=2.1.1 +RUN apt-get update && \ + apt-get install build-essential chrpath libssl-dev libxft-dev -y && \ + apt-get install libfreetype6 libfreetype6-dev -y && \ + apt-get install libfontconfig1 libfontconfig1-dev -y && \ + cd ~ && \ + export PHANTOM_JS="phantomjs-2.1.1-linux-x86_64" && \ + wget https://github.com/Medium/phantomjs/releases/download/v2.1.1/$PHANTOM_JS.tar.bz2 && \ + tar xvjf $PHANTOM_JS.tar.bz2 && \ + mv $PHANTOM_JS /usr/local/share && \ + ln -sf /usr/local/share/$PHANTOM_JS/bin/phantomjs /usr/local/bin +RUN mkdir /refugerestrooms +WORKDIR /refugerestrooms +COPY Gemfile /refugerestrooms/Gemfile +COPY Gemfile.lock /refugerestrooms/Gemfile.lock +RUN bundle install +COPY . /refugerestrooms diff --git a/config/database.yml b/config/database.yml index 1bdf148e..dc2c66e5 100644 --- a/config/database.yml +++ b/config/database.yml @@ -1,13 +1,17 @@ -development: +default: &default adapter: postgresql encoding: unicode - database: bathrooms_development + host: db + username: postgres + password: pool: 5 - host: localhost + +development: + <<: *default + database: bathrooms_development + test: - adapter: postgresql - encoding: unicode + <<: *default database: bathrooms_test - pool: 5 - host: localhost + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..e7fd8114 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,13 @@ +version: '3' +services: + db: + image: postgres + web: + build: . + command: bundle exec rails s -p 3000 -b '0.0.0.0' + volumes: + - .:/refugerestrooms + ports: + - "3000:3000" + depends_on: + - db From abe0847b946a9ece905d2a14c31c0ebe8dec2f3c Mon Sep 17 00:00:00 2001 From: Mikena Wood Date: Sun, 28 Jan 2018 16:40:29 -0800 Subject: [PATCH 02/10] remove vagrant --- Vagrantfile | 54 ----------------------- setup/pg_hba.conf | 99 ------------------------------------------ setup/setup_vagrant.sh | 99 ------------------------------------------ 3 files changed, 252 deletions(-) delete mode 100644 Vagrantfile delete mode 100644 setup/pg_hba.conf delete mode 100644 setup/setup_vagrant.sh diff --git a/Vagrantfile b/Vagrantfile deleted file mode 100644 index 06ebfc8a..00000000 --- a/Vagrantfile +++ /dev/null @@ -1,54 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! -VAGRANTFILE_API_VERSION = "2" -BOXNAME = "refugerestrooms" - -Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| - # Ubuntu 14.04 base box - config.vm.box = "ubuntu/trusty64" - config.vm.hostname = BOXNAME - #config.vm.box_download_checksum = - - # Disable automatic box update checking. If you disable this, then - # boxes will only be checked for updates when the user runs - # `vagrant box outdated`. This is not recommended. - # config.vm.box_check_update = false - - # Access the rails server at localhost:3000 - config.vm.network "forwarded_port", guest: 3000, host: 3000 - - # Use this if you need to copy files via scp or something - # config.vm.network "private_network", ip: "192.168.33.10" - - # If true, then any SSH connections made will enable agent forwarding. - # Default value: false - # config.ssh.forward_agent = true - - # View virtualbox provider docs for more options - config.vm.provider "virtualbox" do |vb| - vb.name = BOXNAME - # Uncomment this if you need more than default of 512 - vb.customize ["modifyvm", :id, "--memory", "1024"] - end - - # If this gets bigger I can make it into a chef run - # mi-wood - config.vm.provision "shell", path: "setup/setup_vagrant.sh", privileged: false - - # Enable provisioning with chef solo, specifying a cookbooks path, roles - # path, and data_bags path (all relative to this Vagrantfile), and adding - # some recipes and/or roles. - # - # config.vm.provision "chef_solo" do |chef| - # chef.cookbooks_path = "../my-recipes/cookbooks" - # chef.roles_path = "../my-recipes/roles" - # chef.data_bags_path = "../my-recipes/data_bags" - # chef.add_recipe "mysql" - # chef.add_role "web" - # - # # You may also specify custom JSON attributes: - # chef.json = { mysql_password: "foo" } - # end -end diff --git a/setup/pg_hba.conf b/setup/pg_hba.conf deleted file mode 100644 index e2e88588..00000000 --- a/setup/pg_hba.conf +++ /dev/null @@ -1,99 +0,0 @@ -# PostgreSQL Client Authentication Configuration File -# =================================================== -# -# Refer to the "Client Authentication" section in the PostgreSQL -# documentation for a complete description of this file. A short -# synopsis follows. -# -# This file controls: which hosts are allowed to connect, how clients -# are authenticated, which PostgreSQL user names they can use, which -# databases they can access. Records take one of these forms: -# -# local DATABASE USER METHOD [OPTIONS] -# host DATABASE USER ADDRESS METHOD [OPTIONS] -# hostssl DATABASE USER ADDRESS METHOD [OPTIONS] -# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS] -# -# (The uppercase items must be replaced by actual values.) -# -# The first field is the connection type: "local" is a Unix-domain -# socket, "host" is either a plain or SSL-encrypted TCP/IP socket, -# "hostssl" is an SSL-encrypted TCP/IP socket, and "hostnossl" is a -# plain TCP/IP socket. -# -# DATABASE can be "all", "sameuser", "samerole", "replication", a -# database name, or a comma-separated list thereof. The "all" -# keyword does not match "replication". Access to replication -# must be enabled in a separate record (see example below). -# -# USER can be "all", a user name, a group name prefixed with "+", or a -# comma-separated list thereof. In both the DATABASE and USER fields -# you can also write a file name prefixed with "@" to include names -# from a separate file. -# -# ADDRESS specifies the set of hosts the record matches. It can be a -# host name, or it is made up of an IP address and a CIDR mask that is -# an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that -# specifies the number of significant bits in the mask. A host name -# that starts with a dot (.) matches a suffix of the actual host name. -# Alternatively, you can write an IP address and netmask in separate -# columns to specify the set of hosts. Instead of a CIDR-address, you -# can write "samehost" to match any of the server's own IP addresses, -# or "samenet" to match any address in any subnet that the server is -# directly connected to. -# -# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi", -# "krb5", "ident", "peer", "pam", "ldap", "radius" or "cert". Note that -# "password" sends passwords in clear text; "md5" is preferred since -# it sends encrypted passwords. -# -# OPTIONS are a set of options for the authentication in the format -# NAME=VALUE. The available options depend on the different -# authentication methods -- refer to the "Client Authentication" -# section in the documentation for a list of which options are -# available for which authentication methods. -# -# Database and user names containing spaces, commas, quotes and other -# special characters must be quoted. Quoting one of the keywords -# "all", "sameuser", "samerole" or "replication" makes the name lose -# its special character, and just match a database or username with -# that name. -# -# This file is read on server startup and when the postmaster receives -# a SIGHUP signal. If you edit the file on a running system, you have -# to SIGHUP the postmaster for the changes to take effect. You can -# use "pg_ctl reload" to do that. - -# Put your actual configuration here -# ---------------------------------- -# -# If you want to allow non-local connections, you need to add more -# "host" records. In that case you will also need to make PostgreSQL -# listen on a non-local interface via the listen_addresses -# configuration parameter, or via the -i or -h command line switches. - - - - -# DO NOT DISABLE! -# If you change this first entry you will need to make sure that the -# database superuser can access the database using some other method. -# Noninteractive access to all databases is required during automatic -# maintenance (custom daily cronjobs, replication, and similar tasks). -# -# Database administrative login by Unix domain socket -local all postgres peer - -# TYPE DATABASE USER ADDRESS METHOD - -# "local" is for Unix domain socket connections only -local all all trust -# IPv4 local connections: -host all all 127.0.0.1/32 trust -# IPv6 local connections: -host all all ::1/128 trust -# Allow replication connections from localhost, by a user with the -# replication privilege. -#local replication postgres peer -#host replication postgres 127.0.0.1/32 md5 -#host replication postgres ::1/128 md5 diff --git a/setup/setup_vagrant.sh b/setup/setup_vagrant.sh deleted file mode 100644 index 50c93e43..00000000 --- a/setup/setup_vagrant.sh +++ /dev/null @@ -1,99 +0,0 @@ -#!/bin/bash -# This script is run from vagrant to setup packages -# It's only tested with ubuntu 14.04 -set -e - -REFUGE_PATH=/vagrant - -# required packages -declare -A packages -packages=( - ["git"]="=1:1.9.1-1" - ["libreadline-dev"]="" - ["nodejs"]="=0.10.25~dfsg2-2ubuntu1" - ["phantomjs"]="=1.9.0-1" - ["postgresql-server-dev-9.3"]="" - ["postgresql-contrib-9.3"]="" -) - -sudo apt-get update -for package in "${!packages[@]}" -do - version=${packages["$package"]} - if dpkg -s $package 2>/dev/null | grep -q "$version"; then - echo $package' installed, skipping' - else - echo "installing $package, version $version..." - sudo apt-get install -y -q $package$version - fi -done - -# Install rbenv and ruby-build -echo 'installing rbenv...' -cd -if ! [ -d .rbenv ]; then - git clone https://github.com/sstephenson/rbenv.git .rbenv -fi -if ! grep -q '.rbenv/bin' $HOME/.bashrc; then - echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc -fi -if ! grep -q 'rbenv init' $HOME/.bashrc; then - echo 'eval "$(rbenv init -)"' >> ~/.bashrc -fi -if ! [ -d ~/.rbenv/plugins/ruby-build ]; then - git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build -fi -if ! grep -q ruby-build $HOME/.bashrc; then - echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc -fi - -# source .bashrc doesn't appear to be setting the path -# adding the following for now: -export PATH="$HOME/.rbenv/bin:$PATH" -eval "$(rbenv init -)" -export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH" - -# Install ruby -ruby_version=$(cat $REFUGE_PATH/.ruby-version | tr -d '\n\r') -if rbenv versions | grep $ruby_version; then - echo 'ruby '$ruby_version' installed, skipping...' -else - echo 'install ruby '$ruby_version - rbenv install $ruby_version -fi - -# Set local ruby version -rbenv local $ruby_version - -# Install bundle reqs -cd $REFUGE_PATH -if which bundle | grep 1.12.15; then - echo 'bundler installed, skipping' -else - echo 'Installing bundler...' - - # We must target a specific version of bundler - # which is specified in vagrant.gemspec. - # File found here: https://github.com/mitchellh/vagrant/blob/a4c7bb822873924619f95edc9baee654fb3d6f1f/vagrant.gemspec#L23 - # Please see https://github.com/mitchellh/vagrant/issues/7193#issuecomment-204309088 for info - gem install bundler -v 1.12.5 --no-rdoc --no-ri -q -fi -echo 'Running bundle install...' -bundle install --gemfile=$REFUGE_PATH/Gemfile - -# Change permissions on pg_hba.conf -pg_hba=/etc/postgresql/9.3/main/pg_hba.conf -sudo cp "$REFUGE_PATH/setup/pg_hba.conf" $pg_hba -sudo chown postgres:postgres $pg_hba -sudo chmod 640 $pg_hba -sudo -u postgres psql -c 'select pg_reload_conf();' postgres - -# Creating postres user -if ! sudo -u postgres psql -c 'SELECT rolname FROM pg_roles;' postgres | grep vagrant; then - echo 'Creating vagrant postgres user...' - sudo -u postgres createuser vagrant --createdb --superuser -fi - -# Seed db -echo 'Seeding db...' -bundle exec rake db:setup From 1b8c5d840b564c3ef6fb71115038b4c85ef9f53f Mon Sep 17 00:00:00 2001 From: Mikena Wood Date: Sun, 28 Jan 2018 16:41:25 -0800 Subject: [PATCH 03/10] remove more vagrant --- .rake/vagrant.rb | 14 -------------- Rakefile | 3 --- 2 files changed, 17 deletions(-) delete mode 100644 .rake/vagrant.rb diff --git a/.rake/vagrant.rb b/.rake/vagrant.rb deleted file mode 100644 index 21793411..00000000 --- a/.rake/vagrant.rb +++ /dev/null @@ -1,14 +0,0 @@ -namespace :vagrant do - task :shell, [:command] do |_t, args| - fail "Usage rake vagrant:shell[command]" unless args[:command] - - vagrant_path = 'PATH=/home/vagrant/.rbenv/shims:$PATH' - - # We need to reset RUBYLIB in order to use gems in - # the context of the VM. - # - # Please see: https://github.com/mitchellh/vagrant/issues/6158#issuecomment-135796049 - # for more info. - sh "unset RUBYLIB; vagrant ssh -c 'cd /vagrant/ && #{vagrant_path} bundle exec #{args[:command]}'" - end -end diff --git a/Rakefile b/Rakefile index c5ac3a48..aa55ec69 100644 --- a/Rakefile +++ b/Rakefile @@ -5,6 +5,3 @@ require File.expand_path('../config/application', __FILE__) SaferstallsRails::Application.load_tasks -Dir.glob('.rake/*.rb').each do |f| - import f -end From fe747963134da8fb2f281aecd1aaaa395069c04d Mon Sep 17 00:00:00 2001 From: Mikena Wood Date: Sun, 28 Jan 2018 16:45:53 -0800 Subject: [PATCH 04/10] update docs --- CONTRIBUTING.md | 45 +++++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 573f0965..59dc68fe 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,32 +4,29 @@ ### 1 Fork and clone the repository. -### 2 Install Vagrant. -https://www.vagrantup.com/downloads.html - -### 3 Install VirtualBox -https://www.virtualbox.org/wiki/Downloads - -### 4 Capture the powers of vagrant - * In the repo dir: vagrant up (Safely ignore: 'dpkg-preconfigure: unable to re-open stdin: No such file or directory') - * If changes have been made since running vagrant up: vagrant provision - - * Start the rails server. There are two ways to do this, depending on your familiarity running from within the vagrant shell: - - 1. A local `rake` wrapper that allows direct execution on the machine. - * Run `rake vagrant:shell[command]`1 - * To start the rails server using the rake wrapper use: `rake vagrant:shell['rails s -b 0.0.0.0']`. - * Navigate to `localhost:3000` - 2. Using `vagrant ssh` to gain access directly to the machine. - * To login to the machine: vagrant ssh - * `cd /vagrant/` to navigate to the refuge repo. - * To start the rails server use: `rails s -b 0.0.0.0`. - * Navigate to `localhost:3000` - - [1] You can run any command locally using `rake vagrant:shell[]` and it will be executed in the repo root of the vagrant machine. You can try `rake vagrant:shell['pwd']` and see it will print the directory that the repo is in on the vagrant machine! +### 2 Install Docker. +https://docs.docker.com/install/ + +### 3 Run the Docker Container +``` +docker-compose up +``` + +Once up, in a separate terminal run: +``` +docker-compose run web rake db:migrate +``` + +### 4 Run the Tests +``` +docker-compose run -e "RAILS_ENV=test" web rake db:test:prepare spec cucumber +``` ### 5 Optional tasks: -run rake db:fix_accents to clean up encoding problems in the safe2pee data. (Use rake db:fix_accents[dry_run] to preview the changes.) +To clean up encoding problems in the safe2pee data, run (Use `rake db:fix_accents[dry_run]` to preview the changes.): +``` +docker-compose run rake db:fixaccents +``` ### 6 Assets * [Assets Repo](https://github.com/RefugeRestrooms/refuge_assets) From b67dc87b4d49279b330c9c3d8667a4ef2c8b0293 Mon Sep 17 00:00:00 2001 From: Mikena Wood Date: Sun, 28 Jan 2018 16:52:59 -0800 Subject: [PATCH 05/10] attempt to use travis... --- .travis.yml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 435d524e..d2486432 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,9 @@ language: ruby -cache: bundler +services: docker +before_install: + - docker build script: - - bundle exec rake db:setup RAILS_ENV=test - - bundle exec rake db:test:prepare - - bundle exec rake spec - - bundle exec rake cucumber -rvm: - - 2.3.1 + - docker-compose run -e "RAILS_ENV=test" web rake db:test:prepare spec cucumber notifications: irc: "chat.freenode.com#refugerestrooms" skip_join: true From 3bf8f02ec250b1dd2d2dd99c19e0d145df193083 Mon Sep 17 00:00:00 2001 From: Mikena Wood Date: Sun, 28 Jan 2018 16:55:53 -0800 Subject: [PATCH 06/10] use compose --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d2486432..ba20a2ca 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: ruby services: docker before_install: - - docker build + - docker-compose build script: - docker-compose run -e "RAILS_ENV=test" web rake db:test:prepare spec cucumber notifications: From 52d542eceee8a8ddde16725a91aee995f33f67f7 Mon Sep 17 00:00:00 2001 From: Mikena Wood Date: Sun, 28 Jan 2018 16:58:42 -0800 Subject: [PATCH 07/10] add docs for forking project --- CONTRIBUTING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 59dc68fe..2ca33796 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,6 +3,7 @@ ## Setting Up Development Environment ### 1 Fork and clone the repository. +https://help.github.com/articles/fork-a-repo/ ### 2 Install Docker. https://docs.docker.com/install/ From 3fa6d25aced30739eff2ec109b9f0c91439f6efd Mon Sep 17 00:00:00 2001 From: Mikena Wood Date: Sun, 28 Jan 2018 17:00:58 -0800 Subject: [PATCH 08/10] update contributing docs --- CONTRIBUTING.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2ca33796..b5a48c8d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,8 +9,9 @@ https://help.github.com/articles/fork-a-repo/ https://docs.docker.com/install/ ### 3 Run the Docker Container +Build the container ``` -docker-compose up +docker-compose build ``` Once up, in a separate terminal run: @@ -18,6 +19,14 @@ Once up, in a separate terminal run: docker-compose run web rake db:migrate ``` +You can now run and shutdown the app with: +``` +docker-compose up +docker-compose down +``` + +It will be available at localhost:3000 + ### 4 Run the Tests ``` docker-compose run -e "RAILS_ENV=test" web rake db:test:prepare spec cucumber From fc71ccf418fbf3762bc218a0a90b81386f18f787 Mon Sep 17 00:00:00 2001 From: Mikena Wood Date: Sun, 28 Jan 2018 21:54:54 -0800 Subject: [PATCH 09/10] add db:create and db:migrate as entrypoint --- docker-compose.yml | 1 + setup/entry | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100755 setup/entry diff --git a/docker-compose.yml b/docker-compose.yml index e7fd8114..a300d2c4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,6 +4,7 @@ services: image: postgres web: build: . + entrypoint: [setup/entry] command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/refugerestrooms diff --git a/setup/entry b/setup/entry new file mode 100755 index 00000000..620cc5b9 --- /dev/null +++ b/setup/entry @@ -0,0 +1,7 @@ +#!/bin/bash +set -e + +rake db:create +rake db:migrate + +exec "$@" From c88d65054f8dc5e18264b86f99d37974c12cee15 Mon Sep 17 00:00:00 2001 From: Mikena Wood Date: Sun, 28 Jan 2018 21:56:07 -0800 Subject: [PATCH 10/10] update docs --- CONTRIBUTING.md | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b5a48c8d..46d03054 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,16 +8,13 @@ https://help.github.com/articles/fork-a-repo/ ### 2 Install Docker. https://docs.docker.com/install/ -### 3 Run the Docker Container +### 3 Build the Docker Container Build the container ``` docker-compose build ``` -Once up, in a separate terminal run: -``` -docker-compose run web rake db:migrate -``` +### 4 Run the Docker Container You can now run and shutdown the app with: ``` @@ -27,18 +24,18 @@ docker-compose down It will be available at localhost:3000 -### 4 Run the Tests +### 5 Run the Tests ``` docker-compose run -e "RAILS_ENV=test" web rake db:test:prepare spec cucumber ``` -### 5 Optional tasks: +### 6 Optional tasks: To clean up encoding problems in the safe2pee data, run (Use `rake db:fix_accents[dry_run]` to preview the changes.): ``` docker-compose run rake db:fixaccents ``` -### 6 Assets +### 7 Assets * [Assets Repo](https://github.com/RefugeRestrooms/refuge_assets) ## Testing