Tool:Prompter
Prompter | |
---|---|
Website | prompter |
Description | Generates prompts for users to update Wikidata by comparing external CSVs to what's in Wikidata |
Keywords | csv, prompts, wikidata |
Author(s) | EveryPolitician Team |
Maintainer(s) | (View all) |
Source code | https://github.com/everypolitician/prompter |
License | MIT License |
Controlling the service
Start
become prompter webservice --backend=kubernetes ruby2 start /data/project/prompter/prompter/script/toolforge-start
Stop
become prompter webservice --backend=kubernetes ruby2 stop
Update code and restart
Toolforge doesn't currently, at least as far as I understand, offer zero-downtime deploys, so there will be a short time while deploying where the webapp will return a 502 error. This should resolve itself once the Kubernetes pod has started up correctly.
become prompter cd prompter git pull webservice --backend=kubernetes ruby2 restart
Sometimes when running that last restart command you'll see a Python stacktrace from the webservice
tool. This appears to be harmless, but it's prudent to check that the service has correctly by checking the running pods and viewing the logs for the service using the Kubernetes commands below.
Kubernetes commands
Check which pods are running
kubectl get pods
View logs for a pod
First copy the pod name from the output of kubectl get pods
and then run:
kubectl logs -f <POD-NAME>
Refreshing prompts regularly with cron
In order to install the crontab I ran the following commands:
become prompter crontab -e
Then I added the following crontab entry, which refreshes all prompts at 09:00 UTC:
0 9 * * * /usr/bin/jsub -N cron-tools.prompter-1 -once -quiet /data/project/prompter/prompter/script/toolforge-cronjob
That runs ./script/toolforge-cronjob
from the prompter repo, which in turn runs ./script/update-all-prompts
.
Initial setup
This project uses Ruby 2.4.1, but the latest version available on Toolforge at the time of writing (17:36, 23 August 2017 (UTC)) is 2.1.5p273
. So to get this running on Toolforge I first had to download and install a newer version of Ruby. I used Travis CI's Precompiled Ruby Versions to download a prebuilt version of Ruby 2.4.1. These are the exact steps I took:
become prompter curl -sL 'https://rubies.travis-ci.org/ubuntu/14.04/x86_64/ruby-2.4.1.tar.bz2' | tar xjvf - echo 'export PATH="$HOME/ruby-2.4.1/bin:$PATH"' >> ~/.profile source ~/.profile gem install bundler
Then to install the application code I did the following:
git clone https://github.com/everypolitician/prompter cd prompter bundle install --deployment --without development test --path vendor -j 3
With those steps complete I was able to start the service.
Other notes
- I had to make sure the app was listening on 0.0.0.0, not localhost, to get it running correctly in Kubernetes
- Use the PORT environment variable to determine which port to listen on.
- The
./script/toolserver-start
script encapsulates starting the service, this is the script passed as the SCRIPT parameter to the webservice command.