Die Arbeit sollte auf der Hauptniederlassung basieren und für diese per PR bereitgestellt werden. Wir verwenden den PR-Genehmigungsprozess von GitHub. Sobald Ihre PR fertig ist, muss sie von einer Person genehmigt und die CI-Tests bestanden werden, bevor sie zusammengeführt werden kann.
Klonen Sie dieses Repository und cd
dann in das neue Verzeichnis
$ git clone [email protected]:ministryofjustice/peoplefinder.git
$ cd peoplefinder
Wenn Sie rbenv
noch nicht installiert haben, installieren Sie es wie folgt:
$ brew install rbenv ruby-build
$ rbenv init
Befolgen Sie die Anweisungen des Befehls rbenv init
und aktualisieren Sie Ihre Datei ~/.bash_profile
oder eine entsprechende Datei entsprechend. Starten Sie dann ein neues Terminal und navigieren Sie zum Repo-Verzeichnis.
Verwenden Sie rbenv
, um die neueste Version von Ruby zu installieren, wie in .ruby-version
definiert (stellen Sie sicher, dass Sie sich im Repo-Pfad befinden):
$ rbenv install
Postgresql
$ brew install postgresql
Opensearch
$ brew install opensearch
Verwenden Sie die folgenden Befehle, um Gems und Javascript-Pakete zu installieren und dann die Datenbank zu erstellen
$ bin/setup
Erstellen Sie einige Demo-Teams
$ DOMAIN=fake.gov.uk bin/rake peoplefinder:data:demo
Um den Webserver einfach ohne Hintergrundjobs auszuführen (normalerweise ausreichend):
$ bin/rails server
Die Website wird unter http://localhost:3000 zugänglich sein.
Diese sollten in der Datei „config/application.rb“ oder in den Dateien „enviroments/ environment .rb“ definiert werden, wenn die Einstellungen für jede Umgebung definiert werden müssen.
config.app_title
z. B. „My New People Finder“
config.default_url_options
zB { host: mail.peoplefinder.example.com }
config.open_search_url
Für die Produktion erforderlich (siehe Abschnitt „Suche“ unten)
config.support_email
zB '[email protected]'
config.send_reminder_emails
Auf true setzen, wenn Erinnerungs-E-Mails per Cronjobs versendet werden sollen
Das System ermöglicht die Anmeldung für E-Mails, deren Domains auf der Whitelist stehen. Die Whitelist befindet sich in der Datenbank und wird vom PermittedDomain
-Modell verwaltet. Mindestens eine Domain muss auf die Whitelist gesetzt werden, bevor sich jemand anmelden kann (das gilt auch für die Entwicklung).
Hinzufügen einer neuen Domäne zur Produktionsdatenbank von bash/zsh usw.:
kubectl get pods -n <NAMESPACE>
ankubectl exec -it <POD> -n <NAMESPACE> ash
zurails c
PermittedDomain.create(domain: '<DOMAIN_NAME>')
email@<DOMAIN_NAME>
Auf die Site kann im schreibgeschützten Modus von MOJ-IP-Adressen aus zugegriffen werden. Die Liste der IPs wird in einer Umgebungsvariablen namens IP_ALLOWLIST
gespeichert, die sich in einem Kubernetes-Geheimnis befindet. Dieselbe IP-Liste wird auch verwendet, um den Zugriff auf den Verwaltungsbereich für Admin-Benutzer einzuschränken.
Die Token-Authentifizierungsmethode basiert auf dem Zugriff des Benutzers auf sein E-Mail-Konto, um ihn zu authentifizieren.
Jedes Mal, wenn der Benutzer eine Sitzung starten möchte, muss er ein Authentifizierungstoken generieren. Dies kann durch Eingabe der E-Mail-Adresse (von einer zulässigen Domain) auf dem Anmeldebildschirm erfolgen. Sie erhalten eine E-Mail-Nachricht mit einem Link mit einem eindeutigen, zufälligen Token. Durch Klicken auf den Link können sie sich anmelden.
Für lokale Tests: Es gibt verschiedene Möglichkeiten, das Token zu erhalten
select * from tokens where user_email = <the email you use for asking token from app> order by id desc;
http://localhost:3000/tokens/
Verwenden Sie dann das Token unter dieser URL: http://localhost:3000/tokens/3da4f4e2-8001-4437-b3ab-7e2b3f6e768c <-- ersetzen Sie es durch Ihr Token.
People Finder versendet einige Arten von E-Mails mit GOV.UK Notify
In der Produktion werden regelmäßig E-Mails an Benutzer gesendet, die Folgendes haben:
Um die Engine im Produktionsmodus auszuführen, muss config.open_search_url
beispielsweise in config/application.rb festgelegt werden. Die zum Festlegen verwendete Umgebungsvariable ist MOJ_PF_ES_URL
Siehe „Konfigurierbare Elemente“ oben.
Verwenden Sie localhost:9200
wenn Sie die OpenSearch-Suche lokal aufrufen.
Die folgenden Befehle in Kubernetes-Umgebungen rufen den Open Search-Proxy-Pod auf, der dann Open Search in AWS aufruft, um Daten zu lesen oder zu aktualisieren.
Um den Zustand des Opensearch-Stacks zu überprüfen, können Sie von jeder Hostinstanz aus Folgendes verwenden. wget
lädt die Informationen auf die Pods herunter, sodass Sie die Dateien mit cat
lesen können. Lokal können Sie einfach curl
verwenden.
wget 'aws-es-proxy-service:9200/_cat/health?v'
oder sehen Sie sich die ES-Einstellungen und Statistiken an:
wget 'aws-es-proxy-service:9200/_cluster/stats/?pretty'
wget 'aws-es-proxy-service:9200/_cat/indices?v'
wget 'aws-es-proxy-service:9200/_cat/nodes?v'
Wenn Sie eine IndexMissingException erhalten, müssen Sie das Personenmodell indizieren:
bundle exec rake environment opensearch:import:model CLASS='Person' FORCE=y
Oder alternativ:
rake peoplefinder:es:index_people
Oder Sie können den Index über die Konsole erstellen, wenn die oben genannten Rake-Befehle fehlschlagen:
OpenSearch :: Model . client = OpenSearch :: Client . new ( url : Rails . configuration . open_search_url ) . index ( index : Person . index_name , body : { } )
Person . __opensearch__ . create_index! index : Person . index_name , force : true
Und füllen Sie es aus:
Person.import
Sie können den Index auch löschen:
Person.delete_indexes
So führen Sie Spezifikationen ohne OpenSearch aus:
bundle exec rspec . --tag ~opensearch
Wenn Ihre Shell Zsh ist, müssen Sie ~
mit ~
maskieren.
Hinweis: Derzeit führt leider kein Weg daran vorbei, dass ES lokal ausgeführt wird, Sie können jedoch wie oben erwähnt einen Docker-Container verwenden.
Manipulation
Wir verwenden MiniMagick, daher muss zur Bildbearbeitung und für einige Tests entweder Imagemagick oder Graphicsmagick installiert werden.
Wenn Sie brew verwenden, können Sie den folgenden Befehl verwenden:
brew install imagemagick
Lagerung
Für die lokale Entwicklungsumgebung werden die Profilbilder als Dateien gespeichert. Für die bereitgestellten Umgebungen werden Profilbilder in ihrem eigenen AWS S3-Bucket gespeichert. Die Buckets gewähren Nicht-AWS-Benutzern keine Gruppenberechtigungen (d. h. sie sind privat). Der Zugriff auf die Bilder erfolgt über vorsignierte, zeitlich begrenzte URLs, die von der App generiert werden.
Bilder, die von der App in den Bucket hochgeladen werden, verhindern explizit das Lesen in die AWS-Gruppe „Jeder“, indem die CarrierWave-Konfiguration in ihrem Initialisierer verwendet wird – die Standardeinstellung für diese Konfiguration ist true/public.
config.fog_public = false # default: true
Das Anwendungslayout wird durch das moj_internal_template festgelegt, das als Teil dieser Engine installiert wird.
Sie können dieses Layout in der Wrapper-Anwendung überschreiben und Ihre eigene Datei erstellen:
app/views/layouts/peoplefinder/peoplefinder.html.haml
Ein Großteil des Textes in den Ansichten ist in der Übersetzungsdatei konfigurierbar.
Sie können diese in der Wrapper-Anwendung überschreiben, indem Sie Ihre eigene Datei erstellen:
config/locales/en.yml
Der RandomGenerator
ist in der Lage, mehrere Ebenen von Teams und Personen mit zufällig generierten Details in diesen Teams zu generieren.
Verwendung:
group = Group . find ( ... )
# initialise the generator with a parent group
generator = RandomGenerator . new ( group )
# clean all subgroups and people within the provided parent group
generator . clear
# generate team structure and people with the given parameters
groups_levels = 2 # number of levels to generate
groups_per_level = 3 # how many teams per each level
people_per_group = 5 # how many people should be in the bottom most teams
domain = 'fake.gov.uk' # which e-mail address should be used for e-mails (has to be whitelisted)
generator . generate ( groups_levels , groups_per_level , people_per_group , domain )
Sie können auch halbzufällige Daten mithilfe der Rake-Aufgabe peoplefinder:data:demo
generieren, die als Teil von peoplefinder:db:reload
aufgerufen wird. Durch wiederholtes Ausführen von peoplefinder:demo:data
werden Mitglieder zu den erstellten Beispielgruppen hinzugefügt.
Führen Sie rake -T | grep people
aus rake -T | grep people
für die neueste Liste:
rake peoplefinder:data:demo # create basic demonstration data
rake peoplefinder:data:demo_csv[count,file] # create a valid csv for load testing, [count: number of records=500], [file: path to file=spec/fixtures/]
rake peoplefinder:db:clear # drop all tables
rake peoplefinder:db:reload # drop tables, migrate, seed and populate with demonstration data for development purposes
rake peoplefinder:db:reset_column_information # reset all column information
rake peoplefinder:import:csv_check[path] # Check validity of CSV file before import
rake peoplefinder:import:csv_import[path] # Import valid CSV file
Damit der Peoplefinder erfolgreich ist, müssen Profile befüllt und gepflegt werden.
Alle in einer bereitgestellten Umgebung ausgelösten Ausnahmen werden an Sentry gesendet.