collaborative knowledge-exchange platform
a collaborative knowledge-exchange platform in Rails; we welcome first-time contributors! :balloon:
The content management system for the Public Lab research community, the
plots2 web application is a combination of a group research blog -what we call "research notes"-and a wiki. Read more about the data model here.
Begin running (and contributing to) this codebase immediately with GitPod:
It showcases a variety of features that help the Public Lab community collaborate on environmental technology, design, documentation, and community organizing. Originally a Drupal site, it was rewritten in 2012 with Ruby on Rails and has since extended but not yet entirely replaced the legacy Drupal data model and database design. We ❤️ Open Source and actively participate in various OSS programs such as Google Summer of Code(GSoC), Rails Girls Summer of Code (RGSoC), Outreachy, and Google Code-In (GCI).
Some key features include:
We are developing a draft Roadmap for
plots2 and our broader Public Lab code projects; read more and comment here.
A full description of the features, audiences, inter-relationships, and goals of Public Lab software projects can be found here: https://publiclab.org/software-overview
The people who create our platform make very different design and technology decisions from other projects. This stems from our deep belief that, to see a change in the world, we must build and maintain systems that reflect our values and principles.
From design to system architecture to basic vocabulary and communication patterns, our systems have grown organically since 2010 to support a powerful, diverse, and cooperative network of people capable of taking on environmental problems that affect communities globally. The platform we have built together speaks to this shared history in many ways, big and small. It reflects input from people facing serious health issues, on-the-ground organizers, policy specialists, hardware hackers, educators, and civil servants.
This broad community and the Public Lab team have facilitated a space where we can discuss, break down, construct, prototype, and critique real-world projects. Together we have shaped a platform that incorporates familiar pieces but ultimately looks and feels quite different from anything else on the internet. Despite the growth of our platform, it remains committed to hearing the voices of others, mutual respect and support, an awareness of the barriers and challenges presented by gaps in expertise and knowledge, and a sensitivity to the inequalities and power imbalances perpetuated by many mainstream modes of knowledge production and technological and scientific development.
Our mutual aim to democratize inexpensive and accessible do-it-yourself techniques has allowed us to create a collaborative network of practitioners who actively re-imagine the human relationship with the environment. Our goals are supported and facilitated by a system which questions and even challenges how collaborative work can happen.
(Above: draft of our Data model)
We welcome contributions, and are especially interested in welcoming first time contributors. Read more about how to contribute below! We especially welcome contributions from people belonging to groups under-represented in free and open source software!
Please read and abide by our Code of Conduct; our community aspires to be a respectful place both during online and in-person interactions.
For installation, prerequisites include sqlite3 and rvm. Click here for a complete list and instructions.
git clone https://github.com/your_username/plots2.gitwhere
your_usernameis your GitHub username.
git remote add upstream https://github.com/publiclab/plots2.git
bundle installif you have older gems in your environment from previous Rails work. If you get an error message like
Your Ruby version is 2.x.x, but your Gemfile specified 2.7.3then you need to install the ruby version 2.7.3 using
rvm install 2.7.3followed by
rvm use 2.7.3
rbenv install 2.7.3followed by
rbenv local 2.7.3
bundle config set without 'production mysql'from the rails root folder to set your project to exclude libraries only needed in production.
bundle installfrom the rails root folder.
cp db/schema.rb.example db/schema.rbto make a copy of
sqlite3as your plots2 database as some of our contributors have reported issues while using
cp config/database.yml.mysql.example config/database.ymlto make a copy of
cp config/database.yml.sqlite.example config/database.ymlto make a copy of
config/database.yml. kindly note if you choose to use sqlite some tests may fail. The project was setup initially to use mysql and some tests are tailored for mysql db. No need for alarm, we are working to fix these and this will not interfere with your development process
rake db:setupto set up the database
rails webpacker:install && rails webpacker:install:react && rails generate react:install(for local SSL work, see SSL below)
passenger startand navigate to
http://localhost:3000/on your browser.
rails testto confirm that your install is working properly. You can also run
rails test:systemfor system tests. (Note: if you chose sqlite as your database, some tests may fail; Please ignore these, we are working to fix this. If your server starts correctly, you are all set)
We recommend you either work in a virtual environment, or on a dual booted system to avoid dependencies issues as Unix systems tend to work smoother with Ruby and Rails. This will not only benefit you now for plots2, but also in the future while working on other Ruby projects, a Linux or Mac based OS will make your development much easier.
1. Windows Subsystem for Linux (recommended)
2. Dual Booting, option2, video guide
3. Setting up a Linux virtual env
Before continuing with the installation steps in this README, users of Windows Subsystem for Linux 2 (WSL 2) should open the WSL 2 Terminal and type out the commands below.
sudo apt update
sudo apt install curl g++ gcc autoconf automake bison libc6-dev
sudo apt install libffi-dev libgdbm-dev libncurses5-dev libsqlite3-dev libtool
sudo apt install libyaml-dev make pkg-config sqlite3 zlib1g-dev libgmp-dev
sudo apt install libreadline-dev libssl-dev
sudo apt install gnupg2
gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL https://get.rvm.io | bash -s stable
rvm install ruby-x.x.x (this projects Ruby version)
rvm --default use ruby-x.x.x (replace x.x.x with this project's Ruby version)
Public Lab uses Redis and may be required for some functionality when running the application locally.
1. Install Redis if you haven't already:
* Using MacOS:
brew install redis
* Using Linux:
sudo yum -y install redis
* Using Ubuntu WSL2:
* update & upgrade Ubuntu:
sudo apt update && apt upgrade
* install redis:
sudo apt install Redis-server
* open Redis.config file:
sudo nano /etc/redis/redis.conf
* update the file by changing the supervised no line to supervised systemd(ubuntu uses systemd)
* start Redis:
sudo service redis-server start
* open Redis CLI:
* test Redis: type
ping & response should be
* exit cli: type
* Awesome :thumbsup: All done :white_check_mark:
2. Run Redis server:
* Using MacOS:
brew services start redis
* Using Linux:
3. Run SideKiq:
bundle exec sidekiq
4. If SideKiq started correctly Redis is now configured and working!
At Public Lab we use the openssl gem to provide SSL (Secure Sockets Layer) for a secure connection (https) in the development mode. You can run the https connection on localhost through the following steps:
passenger start --ssl --ssl-certificate config/localhost.crt --ssl-certificate-key config/localhost.key --ssl-port 3001.
2. Open up https://localhost:3001.
3. Add security exceptions from the advance settings of the browser.
You can also use http (unsecure connection) on the port number 3000 by going to 'http://localhost:3000'. We use port number 3001 for 'https' and port number 3000 for 'http' connection.
Secure connection is needed for OAuth authentication etc.
Once you complete the installation, use any of these credentials to login into the PL website in your local development/testing environment to gain additional permissions for logged in users only. Each one comes with its own set of permissions; nevertheless, the experience across them is pretty much the same.
For more on the login systems, see this page
Click here for a comprehensive description of testing and [here](SYSTEM_TESTS.md) to learn about system tests.
whenever --update-crontabto update the cron jobs.
For some, it will be necessary to prepend your gem-related commands with
bundle exec passenger start.
bundle exec ensures you're using the version of passenger you just installed with Bundler.
bundle exec rake db:setup,
bundle exec rake db:seed are other examples of where this might be necessary.
Public Lab now supports "reply by email to comment" feature. For more details, go to the email documentation
To report bugs and request features, please use the GitHub issue tracker
This application uses RECAPTCHA via the recaptcha gem in production only. For more information, click here.
Publiclab.org now supports Internationalization and localization, though we are in the initial stages. This has been accomplished with rails-I8n.
To see it in action, click on the 'Language' drop-down located in the footer section of the page. All the guidelines and best practices for I18n can be found here.
Since the implementation of our new Translation system, we now use the
translation() helper, found here. This provides some extra translation features such as inserting a prompt visible to site visitors if no translation exists yet. You can learn more about our translation system by reading our Translation system docs.
To add new languages or for additional support, please write to [email protected]
To report security vulnerabilities or for questions about security, please contact [email protected]. Our Web Working Group will assess and respond promptly.
Help improve Public Lab software!
New to open source/free software? Here is a selection of issues we've made especially for first-timers. We're here to help, so just ask if one looks interesting : https://code.publiclab.org
Here is a link to our Git workflow.
Wishing to contribute to Publiclab as part of Hacktoberfest? Check out our Hacktoberfest contributing docs