/AirCasting

AirCasting API and web application

Primary LanguageRubyOtherNOASSERTION

Build Status Code Climate

AirCasting - Share your Air!

About

This is the AirCasting project - the project aims to build a platform for gathering, visualization and sharing of environmental data. To learn more about the platform visit aircasting.org.

Developing

Branching strategy

  • production is stable code which gets deployed to aircasting.org. If you're setting up your own copy of Aircasting use this branch.
  • master is a base branch to which we merge code. It gets deployed to staging server. It may contain some work-in-progress code or unfinished features.

Prerequisite: Debian / Ubuntu

sudo apt-get install bzip2 curl subversion git-core -y
# install rvm https://rvm.io/rvm/install
sudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion pkg-config imagemagick mysql-server libmysqlclient-dev redis-server libgsl0-dev nodejs -y

Prerequisite: Mac

# install rvm https://rvm.io/rvm/install
brew install gsl

App (any OS)

rvm install 2.0.0
rvm use 2.0.0
gem install bundler
git clone git://github.com/HabitatMap/AirCasting.git
cd aircasting
cp config/database.yml.example config/database.yml
# `socket:` in `config/database.yml` should be equal to the path from
# `mysqladmin variables -uroot | grep socket | grep "\.sock"`
cp config/secrets.yml.example config/secrets.yml
# fill proper secrets in config/secrets.yml
bundle install
bundle exec rake db:create db:migrate
bundle exec sidekiq -d
bundle exec rails server
# visit http://localhost:3000

Tests

run tests

RAILS_ENV=test bundle exec rake db:create db:migrate
bundle exec rspec
bundle exec rake spec:javascript

API documentation

Read more here.

Assets version bumping

Whenever changing code tounching google maps, the data-version attribute in app/views/layouts/map.html.haml should be bumped. This ensures that the assets will reload correctly.

Importing a big db dump to a server, i.e. staging

For restoring a big db dump you can try to opitimize a process by changing the database configuration temporarily. See example post on Stack Overflow

mysql -u root -p
use MY_DATABASE_NAME;

set global net_buffer_length=1000000; --Set network buffer length to a large byte number

set global max_allowed_packet=1000000000; --Set maximum allowed packet size to a large byte number

SET foreign_key_checks = 0; --Disable foreign key checking to avoid delays,errors and unwanted behaviour

source file.sql --Import your sql dump file

SET foreign_key_checks = 1; --Remember to enable foreign key checks when procedure is complete!

Troubleshooting

In case you encounter a similar error

Mysql2::Error: Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ...

please check if any of these files

  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • /usr/local/etc/my.cnf
  • ~/.my.cnf

contain sql_mode = "...". If that's the case, make sure to remove ONLY_FULL_GROUP_BY from the string. Otherwise, just add

sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

to any existing configuration file. If none exists just create ~/.my.cnf as follows

[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

To double check the configuration works

bundle exec rails c
ActiveRecord::Base.connection.execute("show variables like 'sql_mode'").to_a
# the return value should not contain ONLY_FULL_GROUP_BY

Contribute

If you'd like to contribute just use the usual github process - fork, make changes, issue a pull request.

Contact

You can contact the authors by email at info@habitatmap.org.

Thanks

AirCasting uses The YourKit Java Profiler for Performance Tuning

YourKit is kindly supporting open source projects with its full-featured Java Profiler. YourKit, LLC is the creator of innovative and intelligent tools for profiling Java and .NET applications. Take a look at YourKit's leading software products: YourKit Java Profiler and YourKit .NET Profiler.

License

The project is licensed under the GNU Affero GPLv3. For more information see COPYING and visit http://www.gnu.org/licenses/agpl.html.