Adopt-a-Tree
Beautify your street by watering a tree.
Screenshot
See It Online
Production is at http://adoptatree.brewingabetterforest.com/
Stage is at http://adoptatree-mpls-stage.opentwincities.org/
Code of Conduct
As an Open Twin Cities project, the Open Twin Cities Code of Conduct is in effect regarding online and offline project activities.
Open Twin Cities is dedicated to a harassment-free community for everyone. Be kind to one another. Do not insult or put down other community members. Behave civilly.
Installation
System Dependencies
Mac OS X
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git postgres node
Note in the above we are fetching Homebrew to handle system dependencies.
Ubuntu/Debian
sudo apt-get install git postgresql libpq-dev nodejs nodejs-legacy npm libffi-dev
Fedora/RHEL/CentOS
sudo yum install git postgresql-server postgresql-devel nodejs npm libffi-devel patch
sudo postgresql-setup initdb && sudo systemctl enable postgresql.service && sudo service postgresql start
Prep the Database
Mac OS X
First, open another terminal and start the database:
postgres -D /usr/local/var/postgres
Then, create the adopta database user
createuser -d adopta
Linux
sudo -u postgres createuser -d adopta
As superuser, edit:
/etc/postgresql/{version number}/main/pg_hba.conf
in Ubuntu/Debian, or/var/lib/pgsql/data/pg_hba.conf
in Fedora
Find one of these lines:
local all postgres peer
local all all peer
and add the following line right above it:
local all adopta trust
Now, save and restart Postgres:
sudo service postgresql restart
PhantomJS
PhantomJS is used by tests
npm install -g phantomjs
rbenv
rbenv and it's pluggins are installed via Git. Below are commands to run in OS X or Linux for installing rbenv and a couple of useful plugins.
(Note that some systems use ~/.bash_profile
instead of ~/.bashrc
. Running
ls -a ~ | egrep '(.bash_profile|.bashrc)'
should tell you which one to use.)
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash
Get the Repo
git clone https://github.com/ballPointPenguin/adopt-a-tree.git
cd adopt-a-tree
Install the Ruby
First, find out what version of Ruby Adopt-a-Tree runs in
rbenv version
Then, install whatever version of Ruby the above command just returned. This part might take some time.
rbenv install <version number> -k
Install Gems and Create the Adopt-A-Tree Database
gem install bundler
bundle install
bundle exec rake db:create
bundle exec rake db:schema:load
bundle exec rake db:seed
Additional Installation Resources
In case you have trouble with the above installation steps, you might want to refer to the Adopt-a-Hydrant Wiki for detailed instructions on installation. You can also post a question to the Open Twin Cities Google Group.
Usage
rails server
Importing More Trees
Once or twice a year, the Minneapolis Park Board sends us a shapefile full of trees to upload to Adopt-A-Tree. Here is the process for putting those on the site:
- Upload the shapefile to Open Twin Cities' Open Data Portal
- Download a JSON version of the file from Open Twin Cities' Open Data Portal
- Copy the JSON file to the Adopt-A-Tree server, using user
ubuntu
. Bill has keys. - Log into the Adopt-A-Tree server using user
ubuntu
- Back up the database using
pg_dump adopta_production > SOMEFILENAME
. You'll need to change users. - Open a rails console for production.
- Delete all trees that have not been adopted
Thing.where(user_id: nil).destroy_all
- Exit the console, run rake db:trees:list_fields on the JSON file (see below)
- run rake db:trees:import. Be sure RAILS_ENV=production.
- Open a production rails console again and verify the trees have been imported.
- Restart Adopt-A-Tree if the process died during the import.
When running rails
or rake
, you'll need to prepend RAILS_ENV=production bundle exec
Rake Tasks
Three rake tasks are available to help you import additional trees to the database, or to replace all tree data, from a GeoJSON file provided by Socrata.
To view a list of the names and indices of all fields in a file, run rake db:trees:list_fields[PATH_TO_GEOJSON]
.
PATH_TO_GEOJSON can be relative or absolute.
$ rake db:trees:list_fields[db/trees.json]
0 - :sid
1 - :id
2 - :position
.
.
.
64 - x
65 - y
66 - species
For the import and replace tasks, you're going to need to know the column indices for the 'id' (not :id), 'uniqueid', 'x', 'y', and 'species' columns.
To import additional trees into the database from a GeoJSON files, run rake db:trees:import[PATH_TO_GEOJSON,ID_INDEX,UNIQUEID_INDEX,X_INDEX,Y_INDEX,SPECIES_INDEX]
:
rake db:trees:import[db/trees.json,8,9,64,65,66]
To completely replace the trees currently in the databse with the trees contained
in a GeoJSON file, run rake db:trees:replace[PATH_TO_GEOJSON,ID_INDEX,UNIQUEID_INDEX,X_INDEX,Y_INDEX,SPECIES_INDEX]
:
rake db:trees:replace[db/trees.json,8,9,64,65,66]
Deploying
Assuming you have SSH keys setup properly, deploy via:
cap stage deploy
cap production deploy
Accessing Admin View
Based on Raleigh's Adopt-A-Hydrant installation notes.
- First, signup through the site.
- Then open a terminal and start the rails console -
rails console
. - List all users -
User.all
- Find your user id in the list. For this example, assume it is '1'.
- Search for your user -
a=User.find(1)
- Set the admin flag on your user -
a.admin = true
- Save your user -
a.save
- Go back to your browser, and visit localhost:3000/admin
How to Contribute Code
So you want to help out on Adopt-A-Tree? You're awesome, and we're happy to help you be as awesome as possible.
In the spirit of free software, everyone is encouraged to help improve this project. So ways to contribute code include:
- by writing specifications/tests
- by writing code (no patch is too small: fix typos, add comments, clean up inconsistent whitespace)
- by forking and sending pull requests
- by refactoring code
The Basics
First things first, there are a few things you should be familiar with:
- The Command Line. Depending on your computer and the tools you use, you
might use the command line a little or a lot. Either way, it helps to know
how to use it a bit.
- Never used the Command Line before? Check out this tutorial from Open Hatch to get started.
- Using Windows? Open Hatch also has a tutorial focused on the Windows command line.
- Git and GitHub. Adopt-A-Tree uses these tools to manage our collaborative
coding. If you've never used git or GitHub before, you can search the
Internet and find a lot of good resources. You can also checkout these
couple of tutorials to get started:
- Install and Setup Git
- GitHub's Hello World, which covers the on the standard flow for contributing code to projects on GitHub.
- Most of Adopt-A-Tree is written in Ruby and JavaScript, using Rails and jQuery. Familiarity with other frameworks and libraries, such as Sinatra (Ruby) and Ember (JavaScript) might also be helpful. And of course, HTML and CSS.
Don't worry if you're not comfortable with all of these things. Working on a project like Adopt-A-Tree is a great way to learn.
The Process
Are you ready to contribute? Well, here's how:
- Fork the repository.
- Clone your fork to your computer
- Get it running on your computer. There are a couple of tutorials for installing on Linux (https://github.com/codeforamerica/adopt-a-hydrant/wiki/Adopta-Install-Notes), and the process is pretty similar for OS X.
- Find an issue and start working on it at https://github.com/ballPointPenguin/adopt-a-tree/issues
- Be sure to make comments and ask questions on the issues.
- We've prioritized issues into milestones, so please checkout the milestones to see what should get done next.
- Create a topic branch.
- Add specs for your unimplemented feature or bug fix.
- Run
bundle exec rake test
. If your specs pass, return to step 6. - Implement your feature or bug fix.
- Run
bundle exec rake test
. If your specs fail, return to step 8. - Run
open coverage/index.html
. If your changes are not completely covered by your tests, return to step 6. - Add, commit, and push your changes.
- Submit a pull request.
Meetups and Getting Help
Open Twin Cities holds lots of events that everybody is welcome to. Our monthly meetups in Minneapolis and St. Paul are great places to come discuss Adopt-A-Tree, ask questions, and get some help.
We also have online ways to discuss and ask questions about Adopt-A-Tree. Join the Open Twin Cities Google Group to discuss Adopt-A-Tree with civic technologists all around the Twin Cities. You can also pose questions and submit problems and ideas though the issues on GitHub. And feel free to email questions and ideas to contact@opentwincities.org.
Additional Ways to Contribute
Here are some non-coding ways you can contribute:
- by using alpha, beta, and prerelease versions
- by [reporting bugs][submit_tickets]
- by [suggesting new features][submit_tickets]
- by translating to a new language
- by writing or editing documentation
- by closing issues
- by reviewing patches
- financially
[submit_tickets]: #submit_tickets
Submitting an Issue or Bug
We use the GitHub issue tracker to track bugs and features. Before submitting a bug report or feature request, check to make sure it hasn't already been submitted. When submitting a bug report, please include a Gist that includes a stack trace and any details that may be necessary to reproduce the bug, including your gem version, Ruby version, and operating system. Ideally, a bug report should include a pull request with failing specs.
Google Analytics
If you have a Google Analytics account you want to use to track visits to your deployment of this app, just set your ID and your domain name as environment variables:
heroku config:set GOOGLE_ANALYTICS_ID=your_id
heroku config:set GOOGLE_ANALYTICS_DOMAIN=your_domain_name
An example ID is UA-12345678-9
, and an example domain is adoptahydrant.org
.
Supported Ruby Version
This library aims to support and is tested against Ruby version 2.1.0.
If something doesn't work on this version, it should be considered a bug.
This library may inadvertently work (or seem to work) on other Ruby implementations, however support will only be provided for the version above.
If you would like this library to support another Ruby version, you may volunteer to be a maintainer. Being a maintainer entails making sure all tests run and pass on that implementation. When something breaks on your implementation, you will be personally responsible for providing patches in a timely fashion. If critical issues for a particular implementation exist at the time of a major release, support for that Ruby version may be dropped.
Copyright
Copyright (c) 2014 Code for America. See LICENSE for details.