From 4fe8865aca0f9a24571f56b8a74405151ba8081d Mon Sep 17 00:00:00 2001 From: Jason Denney Date: Thu, 25 Feb 2016 13:36:01 -0800 Subject: [PATCH 1/9] Dockerize! Startup with docker-compose up Make sure to docker-compose build first --- .ruby-version | 2 +- Dockerfile | 23 ++++++++ Gemfile | 1 - Gemfile.lock | 103 +++++++++++++++++++----------------- config/database.yml.example | 24 ++++----- docker-compose.yml | 13 +++++ install_extjs.rb | 20 +++++++ 7 files changed, 122 insertions(+), 64 deletions(-) create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100755 install_extjs.rb diff --git a/.ruby-version b/.ruby-version index e5fea6c..314a6ed 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -ruby-1.9.3-p374 +ruby-2.1.1 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9463b97 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +FROM ruby:2.1 + +# throw errors if Gemfile has been modified since Gemfile.lock +RUN bundle config --global frozen 1 + +RUN mkdir -p /usr/src/app +WORKDIR /usr/src/app + +RUN apt-get update && apt-get install -y nodejs --no-install-recommends && \ + apt-get install -y mysql-client postgresql-client sqlite3 --no-install-recommends && \ + apt-get install -y zip unzip --no-install-recommends && \ + rm -rf /var/lib/apt/lists/* + +COPY Gemfile /usr/src/app/ +COPY Gemfile.lock /usr/src/app/ + +RUN bundle install + +COPY install_extjs.rb /usr/src/app/ +RUN /usr/src/app/install_extjs.rb + +EXPOSE 3000 +CMD ["rails", "server", "-b", "0.0.0.0"] diff --git a/Gemfile b/Gemfile index 9bb8108..db7b323 100644 --- a/Gemfile +++ b/Gemfile @@ -45,7 +45,6 @@ group :test do gem 'launchy', '~> 2.4.2' gem 'spork', '~> 0.9.2' #guard dependency for Mac OS 10 - gem 'rb-fsevent', :require => false if RUBY_PLATFORM =~ /darwin/i gem 'guard-spork', '~> 1.5.1' gem 'guard-rspec', '~> 4.2.6' end diff --git a/Gemfile.lock b/Gemfile.lock index e9971ae..d9f2e53 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -36,9 +36,11 @@ GEM activesupport (3.2.13) i18n (= 0.6.1) multi_json (~> 1.0) - addressable (2.3.5) + addressable (2.4.0) arel (3.0.3) - bcrypt-ruby (3.1.2) + bcrypt (3.1.10) + bcrypt-ruby (3.1.5) + bcrypt (>= 3.1.3) bootstrap-will_paginate (0.0.10) will_paginate builder (3.0.4) @@ -49,19 +51,17 @@ GEM rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (~> 2.0) - celluloid (0.15.2) - timers (~> 1.1.0) - childprocess (0.4.0) + childprocess (0.5.9) ffi (~> 1.0, >= 1.0.11) cliver (0.3.2) - coderay (1.1.0) + coderay (1.1.1) coffee-rails (3.2.2) coffee-script (>= 2.2.0) railties (~> 3.2.0) - coffee-script (2.2.0) + coffee-script (2.4.1) coffee-script-source execjs - coffee-script-source (1.7.0) + coffee-script-source (1.10.0) commonjs (0.2.7) database_cleaner (1.2.0) decent_exposure (1.0.2) @@ -72,7 +72,7 @@ GEM warden (~> 1.1.1) diff-lcs (1.2.5) erubis (2.7.0) - execjs (2.0.2) + execjs (2.6.0) factory_girl (2.6.4) activesupport (>= 2.3.9) factory_girl_rails (1.7.0) @@ -80,15 +80,18 @@ GEM railties (>= 3.0.0) faker (1.2.0) i18n (~> 0.5) - ffi (1.9.3) - formatador (0.2.4) - guard (2.4.0) + ffi (1.9.10) + formatador (0.2.5) + guard (2.13.0) formatador (>= 0.2.4) - listen (~> 2.1) + listen (>= 2.7, <= 4.0) lumberjack (~> 1.0) + nenv (~> 0.1) + notiffany (~> 0.0) pry (>= 0.9.12) + shellany (~> 0.0) thor (>= 0.18.1) - guard-rspec (4.2.6) + guard-rspec (4.2.10) guard (~> 2.1) rspec (>= 2.14, < 4.0) guard-spork (1.5.1) @@ -103,15 +106,15 @@ GEM railties (>= 3.1, < 4.1) hike (1.2.3) i18n (0.6.1) - jbuilder (2.0.3) - activesupport (>= 3.0.0) - multi_json (>= 1.2.0) + jbuilder (2.0.8) + activesupport (>= 3.0.0, < 5) + multi_json (~> 1.2) journey (1.0.4) jquery-rails (2.3.0) railties (>= 3.0, < 5.0) thor (>= 0.14, < 2.0) - json (1.8.1) - launchy (2.4.2) + json (1.8.3) + launchy (2.4.3) addressable (~> 2.3) less (2.2.2) commonjs (~> 0.2.6) @@ -119,18 +122,18 @@ GEM actionpack (>= 3.1) less (~> 2.2.0) libv8 (3.3.10.4) - listen (2.4.1) - celluloid (>= 0.15.2) + listen (3.0.6) rb-fsevent (>= 0.9.3) - rb-inotify (>= 0.9) - lumberjack (1.0.4) + rb-inotify (>= 0.9.7) + lumberjack (1.0.10) mail (2.5.4) mime-types (~> 1.16) treetop (~> 1.4.8) method_source (0.8.2) mime-types (1.25.1) - mini_portile (0.5.2) - multi_json (1.8.4) + mini_portile2 (2.0.0) + multi_json (1.11.2) + nenv (0.3.0) netzke-basepack (0.8.4) netzke-core (~> 0.8.2) netzke-cancan (0.8.2) @@ -139,26 +142,29 @@ GEM netzke-core (0.8.4) execjs uglifier - nokogiri (1.6.1) - mini_portile (~> 0.5.0) + nokogiri (1.6.7.2) + mini_portile2 (~> 2.0.0.rc2) + notiffany (0.0.8) + nenv (~> 0.1) + shellany (~> 0.0) orm_adapter (0.0.7) pg (0.17.1) - poltergeist (1.5.0) + poltergeist (1.5.1) capybara (~> 2.1) cliver (~> 0.3.1) multi_json (~> 1.0) websocket-driver (>= 0.2.0) - polyglot (0.3.3) + polyglot (0.3.5) pry (0.9.12.6) coderay (~> 1.0) method_source (~> 0.8) slop (~> 3.4) - rack (1.4.5) - rack-cache (1.2) + rack (1.4.7) + rack-cache (1.6.1) rack (>= 0.4) - rack-ssl (1.3.3) + rack-ssl (1.3.4) rack - rack-test (0.6.2) + rack-test (0.6.3) rack (>= 1.0) rails (3.2.13) actionmailer (= 3.2.13) @@ -175,9 +181,9 @@ GEM rake (>= 0.8.7) rdoc (~> 3.4) thor (>= 0.14.6, < 2.0) - rake (10.1.1) - rb-fsevent (0.9.4) - rb-inotify (0.9.3) + rake (10.5.0) + rb-fsevent (0.9.7) + rb-inotify (0.9.7) ffi (>= 0.5.0) rdoc (3.12.2) json (~> 1.4) @@ -185,11 +191,11 @@ GEM rspec-core (~> 2.14.0) rspec-expectations (~> 2.14.0) rspec-mocks (~> 2.14.0) - rspec-core (2.14.7) + rspec-core (2.14.8) rspec-expectations (2.14.5) diff-lcs (>= 1.1.3, < 2.0) - rspec-mocks (2.14.5) - rspec-rails (2.14.1) + rspec-mocks (2.14.6) + rspec-rails (2.14.2) actionpack (>= 3.0) activemodel (>= 3.0) activesupport (>= 3.0) @@ -197,19 +203,19 @@ GEM rspec-core (~> 2.14.0) rspec-expectations (~> 2.14.0) rspec-mocks (~> 2.14.0) + shellany (0.0.1) shoulda-matchers (1.0.0) - slop (3.4.7) + slop (3.6.0) spork (0.9.2) - sprockets (2.2.2) + sprockets (2.2.3) hike (~> 1.2) multi_json (~> 1.0) rack (~> 1.0) tilt (~> 1.1, != 1.3.0) therubyracer (0.10.2) libv8 (~> 3.3.10) - thor (0.18.1) + thor (0.19.1) tilt (1.4.1) - timers (1.1.0) treetop (1.4.15) polyglot polyglot (>= 0.3.1) @@ -218,14 +224,16 @@ GEM less-rails (~> 2.2.2) railties (>= 3.1) therubyracer (~> 0.10.1) - tzinfo (0.3.38) - uglifier (2.4.0) + tzinfo (0.3.46) + uglifier (2.7.2) execjs (>= 0.3.0) json (>= 1.8.0) warden (1.1.1) rack (>= 1.0) - websocket-driver (0.3.2) - will_paginate (3.0.5) + websocket-driver (0.6.3) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.2) + will_paginate (3.0.7) xpath (2.0.0) nokogiri (~> 1.3) @@ -256,7 +264,6 @@ DEPENDENCIES poltergeist (~> 1.5.0) pry (~> 0.9.8) rails (= 3.2.13) - rb-fsevent rspec-rails (~> 2.14.0) shoulda-matchers (~> 1.0.0) spork (~> 0.9.2) diff --git a/config/database.yml.example b/config/database.yml.example index de29ed3..b51730c 100644 --- a/config/database.yml.example +++ b/config/database.yml.example @@ -1,23 +1,19 @@ -development: +development: &default adapter: postgresql - database: velocipede - username: velocipede - password: - host: 127.0.0.1 + encoding: unicode + pool: 5 + database: <%= ENV['RDS_DB_NAME'] || 'postgres' %> + username: <%= ENV['RDS_USERNAME'] || 'postgres' %> + password: <%= ENV['RDS_PASSWORD'] %> + host: <%= ENV['RDS_HOSTNAME'] || 'db' %> # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: - adapter: postgresql + <<: *default database: velocipede_test - username: velocipede - password: - host: 127.0.0.1 production: - adapter: postgresql - database: velocipede - username: velocipede - password: - host: 127.0.0.1 + <<: *default + database: velocipede_production diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..de96bb9 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,13 @@ +db: + image: postgres + ports: + - "5432" +web: + volumes: + - .:/usr/src/app + build: . + #command: bundle exec rake db:migrate + ports: + - "8080:3000" + links: + - db diff --git a/install_extjs.rb b/install_extjs.rb new file mode 100755 index 0000000..6ea7e99 --- /dev/null +++ b/install_extjs.rb @@ -0,0 +1,20 @@ +#!/usr/bin/env ruby + +require 'fileutils' + +extjs_url = "http://my.jasondenney.com/extjs-4.1.1.zip" +download_dir = '/tmp' +dest_dir ='/usr/lib' +extjs_download_path = File.join(download_dir,'extjs-4.1.1.zip') + +files = Dir.glob(File.join(dest_dir, 'extjs', '*')) +if files.empty? and Dir.glob(extjs_download_path).empty? + `wget -P #{download_dir} #{extjs_url}` + raise "Failed downloading #{extjs_url}" if Dir.glob(extjs_download_path).empty? +end + +if files.empty? + puts `unzip #{extjs_download_path} -d #{dest_dir}/` + FileUtils.mv(File.join(dest_dir, 'ext-4.1.1a'), File.join(dest_dir, 'extjs')) +end +raise "Failed unzipping #{extjs_download_path}" if Dir.glob(File.join(dest_dir,'extjs', '*')).empty? From 02fba62499236f9fb5b0f856ed61e239796757d1 Mon Sep 17 00:00:00 2001 From: Jason Denney Date: Thu, 25 Feb 2016 13:36:18 -0800 Subject: [PATCH 2/9] Fix bug in seed_bike factory --- spec/factories/bikes.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/factories/bikes.rb b/spec/factories/bikes.rb index 18ea59f..ebfc034 100644 --- a/spec/factories/bikes.rb +++ b/spec/factories/bikes.rb @@ -18,7 +18,7 @@ FactoryGirl.define do bike_purpose { FactoryGirl.create(:bike_purpose) } end - factory :seed_bike do + factory :seed_bike, class: Bike do sequence(:shop_id) {|n| n} sequence :serial_number do |n| "#{Faker::Code.isbn}-#{n}" From 9e282eda7cbc58be76c3e5049208ab3c3f10e91c Mon Sep 17 00:00:00 2001 From: Jason Denney Date: Thu, 25 Feb 2016 13:54:10 -0800 Subject: [PATCH 3/9] Need symlink for Docker to link extjs --- .gitignore | 1 - public/extjs | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) create mode 120000 public/extjs diff --git a/.gitignore b/.gitignore index 11bceed..7acb110 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,6 @@ tmp/ .powrc .rbenv-version .DS_Store -public/extjs public/assets public/images/icons config/database.yml diff --git a/public/extjs b/public/extjs new file mode 120000 index 0000000..d103e6b --- /dev/null +++ b/public/extjs @@ -0,0 +1 @@ +/usr/lib/extjs \ No newline at end of file From 43faa79f606cfdbe6cf8671d19ecf62d10b004d8 Mon Sep 17 00:00:00 2001 From: Jason Denney Date: Fri, 26 Feb 2016 16:10:47 -0800 Subject: [PATCH 4/9] Update the readme & docs --- README.md | 80 ++++++++++++++++-------------------------- doc/README_FOR_APP | 1 - doc/guides.md | 20 +++++++++++ doc/local_dev_setup.md | 62 ++++++++++++++++++++++++++++++++ 4 files changed, 113 insertions(+), 50 deletions(-) delete mode 100644 doc/README_FOR_APP create mode 100644 doc/guides.md create mode 100644 doc/local_dev_setup.md diff --git a/README.md b/README.md index 7748c15..b94efee 100644 --- a/README.md +++ b/README.md @@ -1,60 +1,42 @@ # About A web application for bicycle collectives to track bicycles, bicycle work history, volunteer hours, volunteer work history, and volunteers currently in the shop. -See an overview video of what it looks like and how it works here: https://www.youtube.com/watch?v=0-JjM6d9nK4. +See an overview video of what the desktop view looks like and how it works here: https://www.youtube.com/watch?v=0-JjM6d9nK4. -## Instructions/Guides +## Overview/Instructions/Guides -### Adding a User -To add a user, a user must sign themselves up from the initial login screen. An admin can later log in to grant that user admin privileges afterward, if desired. - -### Adding a Bike -How to add a bike to the database: https://www.youtube.com/watch?v=1IchWUdMQ90. - -## Views -The app has two different views. One for "core" volunteers which I consider admins, and another for "customer" volunteers which I consider users. Because of the Netzke/ExtJS framework I used, the current UI is non-intuitive and I feel like is only adequate for admins who can take the time to learn the system. I'm in the process of designing a simpler mobile friendly UI with the essential functionality that's intended for users. You can see those changes on this [branch]( https://github.com/spacemunkay/BikeShed/tree/mobile-ui) - -## Deployment -Currently, at the Velocipede collective we have it running on a computer in the shop on the local network. The reason for this, is so that it's only accessible from within the shop. I'm weighing out different methods for ensuring that users can only log in from within the shop (and not from home), such as a shop password that only admins can see and would make visible from within the physical bike shop. I also don't have to worry about security issues while the app is in development. In the future, I'd like to see the app hosted much like http://freehub.bikekitchen.org/. - -## Ideas -At Velocipede, with a mobile friendly UI for users, I'm hoping we can get donations of old, unused smart phones, connected via local wifi, that can be used as stations to log a volunteer's work and hours. They can be secured by gluing cables into the earphone jacks to deter theft if necessary. This might be another way that the collective can promote reuse of materials. +See [guides](doc/guides.md) # Developer Setup -1. use rvm -1. allow the .rvmrc file -1. `gem install bundler` -1. `bundle` -1. Install Postgres (Mac OSX instructions below) -1. Copy over DB config: `cp config/database.yml.example config/database.yml` -1. Update config with your database (velocipede), user (velocipede), and password. -1. `rake db:create db:migrate` -1. `rake db:seed` -1. Download extJS 4.1 (A version of 4.1 is hosted here: http://my.jasondenney.com/extjs-4.1.1.zip) Latest versions at http://www.sencha.com/products/extjs. Unzip and place where ever you like. -1. Link to your extJS folder path under `public/extjs`: (From app root) `ln -s /MY/PATH/extjs/ public/extjs` -1. `rails s` - - -# Postgres 9.2 Mac OSX Install -1. Install homebrew `ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"` -1. `brew install postgres` -1. First time db initialization `initdb /usr/local/var/postgres -E utf8` -1. Start Postgres `pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start` -1. Create your PG user `createuser -d -P velocipede` -1. Create your database `createdb -U velocipede --owner=velocipede velocipede` -1. Create your test database `createdb -U velocipede --owner=velocipede velocipede_test` - -# Testing - -1. Install phantomjs `brew install phantomjs` -1. Run tests with `rspec` - -# Optional - Add icons - -1. Download icons from http://www.famfamfam.com/lab/icons/silk/ -1. Link to the icons under `public/images/icons`: (From app root) `ln -s /MY/PATH/famfamfam_silk_icons/icons public/images/icons` +## Running with Docker (recommended) + +1. These instructions haven't been tested, please provide corrections! +1. Install Docker Toolbox +1. Make sure you have a machine running: `docker-machine start default && eval "$(docker-machine env default)"` +1. Execute `docker-compose build` +1. Execute `docker-compose run web rake db:create db:migrate` +1. Execute `docker-compose up` +1. If using Docker Toolbox, use `docker-machine ip default` to get the IP where the server is running. +1. Test the Rails server is running with by visiting `:3000` in your browser. + +### Developer Workflow +The project directory should already be mounted inside the container, so you should be able to make live changes. However, since the project is running in the 'web' container, you need to prepend commands with `docker-compose run web`. + +You'll likely want to add the following aliases: +``` +alias dm='docker-machine' +alias dc='docker-compose' +alias dcrw='docker-compose run web' +``` + +That way your commands can be shortened to: +``` +dcrw rake routes +dcrw rails console +dcrw rspec +``` +If there's a better way, I'm all ears. Alternatively you could ssh into the machine with `dcrw bash`. # License Velocipede is released under the MIT license (http://opensource.org/licenses/MIT) diff --git a/doc/README_FOR_APP b/doc/README_FOR_APP deleted file mode 100644 index 379f521..0000000 --- a/doc/README_FOR_APP +++ /dev/null @@ -1 +0,0 @@ -# No API yet diff --git a/doc/guides.md b/doc/guides.md new file mode 100644 index 0000000..85dcfaa --- /dev/null +++ b/doc/guides.md @@ -0,0 +1,20 @@ +# Overview + +## Guides + +### Adding a User +To add a user, a user must sign themselves up from the initial login screen. An admin can later log in to grant that user admin privileges afterward, if desired. + +### Adding a Bike +How to add a bike to the database via the desktop view: . + +## Views +The app has two different views. One for "core" volunteers which I consider admins, and another for "customer" volunteers which I consider users. Because of the Netzke/ExtJS framework I used, the current UI is non-intuitive and I feel like is only adequate for admins who can take the time to learn the system. I'm in the process of designing a simpler mobile friendly UI with the essential functionality that's intended for users. + +## Deployment +Currently, at the Velocipede collective we have it running on a computer in the shop on the local network. The reason for this, is so that it's only accessible from within the shop. I'm weighing out different methods for ensuring that users can only log in from within the shop (and not from home), such as a shop password that only admins can see and would make visible from within the physical bike shop. I also don't have to worry about security issues while the app is in development. In the future, I'd like to see the app hosted much like . + +## Ideas +At Velocipede, with a mobile friendly UI for users, I'm hoping we can get donations of old, unused smart phones, connected via local wifi, that can be used as stations to log a volunteer's work and hours. They can be secured by gluing cables into the earphone jacks to deter theft if necessary. This might be another way that the collective can promote reuse of materials. + + diff --git a/doc/local_dev_setup.md b/doc/local_dev_setup.md new file mode 100644 index 0000000..7748c15 --- /dev/null +++ b/doc/local_dev_setup.md @@ -0,0 +1,62 @@ +# About +A web application for bicycle collectives to track bicycles, bicycle work history, volunteer hours, volunteer work history, and volunteers currently in the shop. + +See an overview video of what it looks like and how it works here: https://www.youtube.com/watch?v=0-JjM6d9nK4. + +## Instructions/Guides + +### Adding a User +To add a user, a user must sign themselves up from the initial login screen. An admin can later log in to grant that user admin privileges afterward, if desired. + +### Adding a Bike +How to add a bike to the database: https://www.youtube.com/watch?v=1IchWUdMQ90. + +## Views +The app has two different views. One for "core" volunteers which I consider admins, and another for "customer" volunteers which I consider users. Because of the Netzke/ExtJS framework I used, the current UI is non-intuitive and I feel like is only adequate for admins who can take the time to learn the system. I'm in the process of designing a simpler mobile friendly UI with the essential functionality that's intended for users. You can see those changes on this [branch]( https://github.com/spacemunkay/BikeShed/tree/mobile-ui) + +## Deployment +Currently, at the Velocipede collective we have it running on a computer in the shop on the local network. The reason for this, is so that it's only accessible from within the shop. I'm weighing out different methods for ensuring that users can only log in from within the shop (and not from home), such as a shop password that only admins can see and would make visible from within the physical bike shop. I also don't have to worry about security issues while the app is in development. In the future, I'd like to see the app hosted much like http://freehub.bikekitchen.org/. + +## Ideas +At Velocipede, with a mobile friendly UI for users, I'm hoping we can get donations of old, unused smart phones, connected via local wifi, that can be used as stations to log a volunteer's work and hours. They can be secured by gluing cables into the earphone jacks to deter theft if necessary. This might be another way that the collective can promote reuse of materials. + +# Developer Setup + +1. use rvm +1. allow the .rvmrc file +1. `gem install bundler` +1. `bundle` +1. Install Postgres (Mac OSX instructions below) +1. Copy over DB config: `cp config/database.yml.example config/database.yml` +1. Update config with your database (velocipede), user (velocipede), and password. +1. `rake db:create db:migrate` +1. `rake db:seed` +1. Download extJS 4.1 (A version of 4.1 is hosted here: http://my.jasondenney.com/extjs-4.1.1.zip) Latest versions at http://www.sencha.com/products/extjs. Unzip and place where ever you like. +1. Link to your extJS folder path under `public/extjs`: (From app root) `ln -s /MY/PATH/extjs/ public/extjs` +1. `rails s` + + +# Postgres 9.2 Mac OSX Install +1. Install homebrew `ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"` +1. `brew install postgres` +1. First time db initialization `initdb /usr/local/var/postgres -E utf8` +1. Start Postgres `pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start` +1. Create your PG user `createuser -d -P velocipede` +1. Create your database `createdb -U velocipede --owner=velocipede velocipede` +1. Create your test database `createdb -U velocipede --owner=velocipede velocipede_test` + +# Testing + +1. Install phantomjs `brew install phantomjs` +1. Run tests with `rspec` + +# Optional + Add icons + +1. Download icons from http://www.famfamfam.com/lab/icons/silk/ +1. Link to the icons under `public/images/icons`: (From app root) `ln -s /MY/PATH/famfamfam_silk_icons/icons public/images/icons` + +# License +Velocipede is released under the MIT license (http://opensource.org/licenses/MIT) + +Made with ♥ in Baltimore From 6daff093ebe7b70b22e9c21a73a784fdd1751434 Mon Sep 17 00:00:00 2001 From: Jason Denney Date: Fri, 26 Feb 2016 16:10:59 -0800 Subject: [PATCH 5/9] Remove comment --- docker-compose.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index de96bb9..2650a9b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,7 +6,6 @@ web: volumes: - .:/usr/src/app build: . - #command: bundle exec rake db:migrate ports: - "8080:3000" links: From 0629972dca6c552ed6792e5280736ad91eccac7b Mon Sep 17 00:00:00 2001 From: Jason Denney Date: Fri, 26 Feb 2016 16:11:22 -0800 Subject: [PATCH 6/9] Update docs again --- doc/local_dev_setup.md | 29 +---------------------------- 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/doc/local_dev_setup.md b/doc/local_dev_setup.md index 7748c15..11047f2 100644 --- a/doc/local_dev_setup.md +++ b/doc/local_dev_setup.md @@ -1,26 +1,4 @@ -# About -A web application for bicycle collectives to track bicycles, bicycle work history, volunteer hours, volunteer work history, and volunteers currently in the shop. - -See an overview video of what it looks like and how it works here: https://www.youtube.com/watch?v=0-JjM6d9nK4. - -## Instructions/Guides - -### Adding a User -To add a user, a user must sign themselves up from the initial login screen. An admin can later log in to grant that user admin privileges afterward, if desired. - -### Adding a Bike -How to add a bike to the database: https://www.youtube.com/watch?v=1IchWUdMQ90. - -## Views -The app has two different views. One for "core" volunteers which I consider admins, and another for "customer" volunteers which I consider users. Because of the Netzke/ExtJS framework I used, the current UI is non-intuitive and I feel like is only adequate for admins who can take the time to learn the system. I'm in the process of designing a simpler mobile friendly UI with the essential functionality that's intended for users. You can see those changes on this [branch]( https://github.com/spacemunkay/BikeShed/tree/mobile-ui) - -## Deployment -Currently, at the Velocipede collective we have it running on a computer in the shop on the local network. The reason for this, is so that it's only accessible from within the shop. I'm weighing out different methods for ensuring that users can only log in from within the shop (and not from home), such as a shop password that only admins can see and would make visible from within the physical bike shop. I also don't have to worry about security issues while the app is in development. In the future, I'd like to see the app hosted much like http://freehub.bikekitchen.org/. - -## Ideas -At Velocipede, with a mobile friendly UI for users, I'm hoping we can get donations of old, unused smart phones, connected via local wifi, that can be used as stations to log a volunteer's work and hours. They can be secured by gluing cables into the earphone jacks to deter theft if necessary. This might be another way that the collective can promote reuse of materials. - -# Developer Setup +# Local Developer Setup 1. use rvm 1. allow the .rvmrc file @@ -55,8 +33,3 @@ At Velocipede, with a mobile friendly UI for users, I'm hoping we can get donati 1. Download icons from http://www.famfamfam.com/lab/icons/silk/ 1. Link to the icons under `public/images/icons`: (From app root) `ln -s /MY/PATH/famfamfam_silk_icons/icons public/images/icons` - -# License -Velocipede is released under the MIT license (http://opensource.org/licenses/MIT) - -Made with ♥ in Baltimore From 1887840507f0540f9700dc15eb44e82778505693 Mon Sep 17 00:00:00 2001 From: Jason Denney Date: Fri, 26 Feb 2016 16:19:29 -0800 Subject: [PATCH 7/9] Fix port in dev guide --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b94efee..08806f0 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ See [guides](doc/guides.md) 1. Execute `docker-compose run web rake db:create db:migrate` 1. Execute `docker-compose up` 1. If using Docker Toolbox, use `docker-machine ip default` to get the IP where the server is running. -1. Test the Rails server is running with by visiting `:3000` in your browser. +1. Test the Rails server is running with by visiting `:8080` in your browser. ### Developer Workflow The project directory should already be mounted inside the container, so you should be able to make live changes. However, since the project is running in the 'web' container, you need to prepend commands with `docker-compose run web`. From e48924a2282ce4045541dde827df08a3543ed5d1 Mon Sep 17 00:00:00 2001 From: Jason Denney Date: Fri, 26 Feb 2016 17:55:24 -0800 Subject: [PATCH 8/9] Fixed bug where rando 401 causes signin redirect --- app/assets/javascripts/panel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/panel.js b/app/assets/javascripts/panel.js index 2f483f0..20f98ca 100644 --- a/app/assets/javascripts/panel.js +++ b/app/assets/javascripts/panel.js @@ -1,6 +1,6 @@ //when signed out, or session expires forward to sign in page Ext.Ajax.on('requestexception', function(conn, response, options) { - if (response.status === 401) { window.location = '/users/sign_in'; } + if (response.status === 401 && response.statusText === "Unauthorized") { window.location = '/users/sign_in'; } }, this); //Override default netzke time entry field From bc6802e5fb4e70abebc472b3694298ccf437b2f7 Mon Sep 17 00:00:00 2001 From: Jason Denney Date: Fri, 26 Feb 2016 18:00:48 -0800 Subject: [PATCH 9/9] Adding famfamfam icons for docker w/ symlink --- .gitignore | 1 - Dockerfile | 3 +++ install_famfamfam.rb | 19 +++++++++++++++++++ public/images/icons | 1 + 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100755 install_famfamfam.rb create mode 120000 public/images/icons diff --git a/.gitignore b/.gitignore index 7acb110..1540cbd 100644 --- a/.gitignore +++ b/.gitignore @@ -7,5 +7,4 @@ tmp/ .rbenv-version .DS_Store public/assets -public/images/icons config/database.yml diff --git a/Dockerfile b/Dockerfile index 9463b97..1ec1baf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,5 +19,8 @@ RUN bundle install COPY install_extjs.rb /usr/src/app/ RUN /usr/src/app/install_extjs.rb +COPY install_famfamfam.rb /usr/src/app/ +RUN /usr/src/app/install_famfamfam.rb + EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"] diff --git a/install_famfamfam.rb b/install_famfamfam.rb new file mode 100755 index 0000000..a9806a1 --- /dev/null +++ b/install_famfamfam.rb @@ -0,0 +1,19 @@ +#!/usr/bin/env ruby + +require 'fileutils' + +fam_url = "http://www.famfamfam.com/lab/icons/silk/famfamfam_silk_icons_v013.zip" +download_dir = '/tmp' +dest_dir = "/usr/lib/famfamfam" +fam_download_path = File.join(download_dir,'famfamfam_silk_icons_v013.zip') + +files = Dir.glob(File.join(dest_dir, '*')) +if files.empty? and Dir.glob(fam_download_path).empty? + `wget -P #{download_dir} #{fam_url}` + raise "Failed downloading #{fam_url}" if Dir.glob(fam_download_path).empty? +end + +if files.empty? + puts `unzip #{fam_download_path} -d #{dest_dir}/` +end +raise "Failed unzipping #{fam_download_path}" if Dir.glob(File.join(dest_dir, '*')).empty? diff --git a/public/images/icons b/public/images/icons new file mode 120000 index 0000000..d5acf06 --- /dev/null +++ b/public/images/icons @@ -0,0 +1 @@ +/usr/lib/famfamfam/icons/ \ No newline at end of file