Работа должна основываться на основной ветке и быть связана с ней. Мы используем процесс утверждения PR на GitHub, поэтому, как только ваш PR будет готов, вам нужно будет, чтобы его утвердил один человек и прошли CI-тесты, прежде чем его можно будет объединить.
Клонируйте этот репозиторий, затем cd
в новый каталог.
$ git clone [email protected]:ministryofjustice/peoplefinder.git
$ cd peoplefinder
Если у вас еще не установлен rbenv
, установите его следующим образом:
$ brew install rbenv ruby-build
$ rbenv init
Следуйте инструкциям, распечатанным из команды rbenv init
, и соответствующим образом обновите файл ~/.bash_profile
или эквивалентный, затем запустите новый терминал и перейдите в каталог репо.
Используйте rbenv
для установки последней версии Ruby, как определено в .ruby-version
(убедитесь, что вы находитесь в пути репо):
$ rbenv install
Постгреск
$ brew install postgresql
Открытый поиск
$ brew install opensearch
Используйте следующие команды для установки пакетов gems и javascript, а затем создайте базу данных
$ bin/setup
Создайте несколько демонстрационных команд
$ DOMAIN=fake.gov.uk bin/rake peoplefinder:data:demo
Чтобы просто запустить веб-сервер без каких-либо фоновых заданий (обычно этого достаточно):
$ bin/rails server
Сайт будет доступен по адресу http://localhost:3000.
Они должны быть определены в файле config/application.rb или в файлах enviroments/enviroments/ environment .rb, если параметры необходимо определить для каждой среды отдельно.
config.app_title
например «Мой новый поиск людей»
config.default_url_options
например {хост: mail.peoplefinder.example.com }
config.open_search_url
Требуется для рабочей среды (см. раздел «Поиск» ниже)
config.support_email
например, «[email protected]»
config.send_reminder_emails
Установите значение true, если электронные письма с напоминаниями должны отправляться cronjobs.
Система позволяет авторизоваться для писем, у которых есть домены из белого списка. Белый список находится в базе данных, управляемой моделью PermittedDomain
. По крайней мере, один домен должен быть внесен в белый список, прежде чем кто-либо сможет войти в систему (это относится и к разработке).
Добавление нового домена в рабочую базу данных из bash/zsh и т. д.:
kubectl get pods -n <NAMESPACE>
kubectl exec -it <POD> -n <NAMESPACE> ash
rails c
PermittedDomain.create(domain: '<DOMAIN_NAME>')
email@<DOMAIN_NAME>
Доступ к сайту возможен в режиме «только чтение» с IP-адресов MOJ. Список IP-адресов хранится в переменной среды IP_ALLOWLIST
, которая находится в секрете Kubernetes. Тот же список IP-адресов также используется для ограничения доступа к разделу управления для пользователей-администраторов.
Метод аутентификации по токену основан на доступе пользователей к своей учетной записи электронной почты для их аутентификации.
Каждый раз, когда пользователь хочет начать сеанс, ему необходимо сгенерировать токен аутентификации. Это можно сделать, введя адрес электронной почты (из разрешенного домена) на экране входа в систему. Им будет отправлено электронное письмо, содержащее ссылку с уникальным случайным токеном. Нажатие на ссылку позволит им войти в систему.
Для локального тестирования. Получить токен можно несколькими способами.
select * from tokens where user_email = <the email you use for asking token from app> order by id desc;
http://localhost:3000/токены/
Затем используйте токен по этому URL-адресу: http://localhost:3000/tokens/3da4f4e2-8001-4437-b3ab-7e2b3f6e768c <-- замените своим токеном.
People Finder отправляет несколько типов электронных писем с помощью GOV.UK Notify
В рабочей среде периодические электронные письма отправляются пользователям, у которых есть:
Чтобы запустить движок в производственном режиме, необходимо установить config.open_search_url
, например, в config/application.rb. Для его установки используется переменная среды MOJ_PF_ES_URL
. См. «Настраиваемые элементы» выше.
Используйте localhost:9200
при локальном вызове поиска OpenSearch.
Следующие команды в средах Kubernetes вызовут модуль прокси открытого поиска, который затем вызовет открытый поиск в AWS для чтения или обновления данных.
Чтобы проверить работоспособность стека opensearch, вы можете использовать следующее с любого экземпляра хоста. wget
загрузит информацию в модули, чтобы вы могли прочитать файлы с помощью cat
. Локально вы можете просто использовать curl
.
wget 'aws-es-proxy-service:9200/_cat/health?v'
или просмотреть настройки и статистику ES:
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'
Если вы получите исключение IndexMissingException, вам нужно будет проиндексировать модель Person:
bundle exec rake environment opensearch:import:model CLASS='Person' FORCE=y
Или, альтернативно:
rake peoplefinder:es:index_people
Или вы можете создать индекс из консоли, если приведенные выше команды rake не работают:
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
И заполните его:
Person.import
Вы также можете удалить индекс:
Person.delete_indexes
Чтобы запустить спецификации без OpenSearch:
bundle exec rspec . --tag ~opensearch
Если ваша оболочка Zsh, вам нужно выйти из ~
с помощью ~
.
Примечание. К сожалению, на данный момент невозможно избежать локального запуска ES, но вы можете использовать Docker-контейнер, как упоминалось выше.
Манипуляция
Мы используем MiniMagick, поэтому для манипуляций с изображениями и для некоторых тестов необходимо установить либо Imagemagick, либо Graphicsmagick.
Если вы используете пиво, вы можете использовать следующую команду:
brew install imagemagick
Хранилище
В локальной среде разработки изображения профиля хранятся в виде файлов. Для развернутых сред изображения профилей хранятся в отдельной корзине AWS S3. Корзины не предоставляют никаких групповых разрешений пользователям, не являющимся пользователями AWS (т. е. являются частными). Доступ к изображениям осуществляется через заранее назначенные, ограниченные по времени URL-адреса, созданные приложением.
Изображения, загружаемые в корзину приложением, явно запрещают чтение группе AWS «Все», используя конфигурацию CarrierWave в ее инициализаторе — значением по умолчанию для этой конфигурации является true/public.
config.fog_public = false # default: true
Макет приложения задается moj_internal_template, который устанавливается как часть этого движка.
Вы можете переопределить этот макет в приложении-оболочке, создав свой собственный файл:
app/views/layouts/peoplefinder/peoplefinder.html.haml
Большую часть текста в представлениях можно настроить в файле переводов.
Вы можете переопределить их в приложении-оболочке, создав свой собственный файл:
config/locales/en.yml
RandomGenerator
способен генерировать несколько слоев команд и людей со случайно сгенерированной информацией в этих командах.
Использование:
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 )
Вы также можете генерировать полуслучайные данные с помощью rake-задачи peoplefinder:data:demo
, которая вызывается как часть peoplefinder:db:reload
. Повторный запуск peoplefinder:demo:data
добавит участников в создаваемые им примеры групп.
Запустить rake -T | grep people
для последнего списка:
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
Для того чтобы Peoplefinder был успешным, профили необходимо заполнять и поддерживать.
Любые исключения, возникшие в любой развернутой среде, будут отправлены в Sentry.