工作应该基于主要分支,并发布到主要分支。我们使用 GitHub PR 批准流程,因此一旦您的 PR 准备就绪,您需要先让一个人批准它,并且 CI 测试通过,然后才能合并。
克隆此存储库,然后cd
到新目录
$ git clone [email protected]:ministryofjustice/peoplefinder.git
$ cd peoplefinder
如果您尚未安装rbenv
,请按如下方式安装:
$ brew install rbenv ruby-build
$ rbenv init
按照rbenv init
命令打印出的说明进行操作,并相应地更新~/.bash_profile
或等效文件,然后启动新终端并导航到 repo 目录。
使用rbenv
安装.ruby-version
中定义的最新版本的 ruby(确保您位于存储库路径中):
$ rbenv install
PostgreSQL
$ brew install postgresql
开放搜索
$ brew install opensearch
使用以下命令安装 gems 和 javascript 包然后创建数据库
$ bin/setup
创建一些演示团队
$ DOMAIN=fake.gov.uk bin/rake peoplefinder:data:demo
仅运行 Web 服务器而不进行任何后台作业(通常就足够了):
$ bin/rails server
该站点可通过 http://localhost:3000 访问。
如果需要在每个环境的基础上定义设置,则应在 config/application.rb 或 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
如果要通过 cronjobs 发送提醒电子邮件,则设置为 true
系统允许登录具有白名单域的电子邮件。白名单位于数据库中,由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>
可以从 MOJ IP 地址以只读模式访问该站点。 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/tokens/
然后使用此 URL 上的令牌: http://localhost:3000/tokens/3da4f4e2-8001-4437-b3ab-7e2b3f6e768c <-- 替换为您的令牌。
People Finder 使用 GOV.UK Notify 发送几种类型的电子邮件
在生产中,会定期向具有以下特征的用户发送电子邮件:
要在生产模式下运行引擎,必须在 config/application.rb 等文件中设置config.open_search_url
。用于设置它的环境变量是MOJ_PF_ES_URL
请参阅上面的“可配置元素”。
在本地调用 OpenSearch 搜索时使用localhost:9200
。
kubernetes 环境中的以下命令将调用 open search 代理 pod,然后该代理 pod 将调用 AWS 上的 open search 来读取或更新数据。
要检查 opensearch 堆栈的运行状况,您可以从任一主机实例使用以下命令。 wget
会将信息下载到 pod 上,以便您可以使用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
如果你的 shell 是 Zsh,你必须使用~
来转义~
。
注意:不幸的是,目前无法避免 ES 在本地运行,但您可以使用上面提到的 docker 容器。
操纵
我们使用 MiniMagick,因此需要安装 Imagemagick 或 Graphicsmagick 来进行图像处理和某些测试。
如果使用brew,您可以使用以下命令:
brew install imagemagick
贮存
对于本地开发环境,配置文件图像存储为文件。对于已部署的环境,配置文件映像存储在其自己的 AWS S3 存储桶中。存储桶不会向非 AWS 用户授予任何组权限(即私有)。对图像的访问是通过应用程序生成的预先签名的、有时间限制的 URL 来实现的。
应用程序上传到存储桶的图像明确阻止在其初始化程序中使用 CarrierWave 配置读取“Everyone”AWS 组 - 此配置的默认值为 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。