4.4 KiB
Developing/Contributing
This document helps you set up the debshots Rails application on your own Debian system if you intend to work on the source code.
Preparing the development environment
Most steps required to deploy the application (for production use) are automated using an Ansible playbook that you find at ./ansible/debshots.yml
The following section documents the steps you need to do to get the application running in development mode. If you are a little experienced in developing Rails applications you may know most of that already.
Development worked best on a Debian Jessie or Sid system.
Install dependencies
These APT-gettable packages are probably required to run the application:
apt install python-psycopg2 ruby sudo libssl-dev libreadline-dev \
zlib1g-dev libbz2-dev libpq-dev git imagemagick
Prepare PostgreSQL database server and user
PostgreSQL stores data about packages, screenshots and users. Authentication works in production because the applications runs as the system user debshots that gets access to PostgreSQL via ident-based authentication. In development mode you will likely work as your own user so you need to create a development database in PostgreSQL and create a database user with a password to access it. Put those credentials into ./config/database.yml
apt install postgresql
su - postgres
createuser -P -d debshots_dev
createdb -O debshots_dev -E UTF8 -T template0 debshots_dev
Install the required Ruby version using rbenv
Rails uses the bundler tool to download and install dependent gems/packages. To avoid installing them system wide you should rather create an rbenv sandbox environment where the specific Ruby version and the required gems are installed. That ensures stable operation of the application and does not spoil your otherwise APT-controlled system.
Documentation on rbenv can be found at https://github.com/rbenv/rbenv
To install it for your current user:
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
Load rbenv automatically by appending
the following to ~/.profile:
Run "rbenv init" and do as said.
Install the "rbenv install" (https://github.com/rbenv/ruby-build#readme) add-on:
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
Get the application
Clone the debshots Git repository from https://salsa.debian.org/debian/debshots
Install the required Ruby version and the applications' dependencies
rbenv install
echo "gem: --no-rdoc --no-ri" > ~/.gemrc
gem install bundler
bundle install
Optional: copy screenshots and database from the live website
scp screenshots.debian.net:debshots-screenshots.tar .
tar -C public/ -xvf debshots-screenshots.tar
scp screenshots.debian.net:debshots.sql .
psql debshots_dev < debshots.sql
Make sure that the application's database schema is upgraded to reflect the latest state of development.
bundle exec rails db:migrate
(The reason to prefix all commands by "bundle exec" to make sure that the Ruby version from rbenv is used and that only the gems from the sandbox environment are used.)
Start with a blank database
Create a blank database with the latest database schema:
bundle exec rails db:schema:load
If you get database access errors then check the development section in your ./config/database.yml file.
Fill/update the database with information from APT repositories
Get the latest information on packages from the Debian repositories.
bundle exec rails debshots:update_from_deb_repos RAILS_ENV=production
bundle exec rails debshots:update_longdescription_from_deb_repos RAILS_ENV=production
Run the application
bundle exec rails s
Point your browser to http://localhost:3000/ and you will see the web site.
Optional: Tidy up the screenshot data
bundle exec rake debshots:remove_broken_screenshots
bundle exec rake debshots:remove_duplicate_images
Optional: Import new package information
bundle exec rake debshots:list_deb_repos
bundle exec rake debshots:update_from_deb_repos
bundle exec debshots:update_longdescription_from_deb_repos
To run the Rails server in development mode on port 3001 with HTTPS:
rails s puma -b 'ssl://0.0.0.0:3001?key=nginx/localhost.key&cert=nginx/localhost.crt&verify_mode=none'
This is required to be able to use single-sign login with the different services.