作業はメイン ブランチに基づいて行われ、メイン ブランチに PR される必要があります。弊社では GitHub PR 承認プロセスを使用しているため、PR の準備ができたら、マージする前に 1 人の承認者がそれを承認し、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-version
で定義されている最新バージョンの Ruby をインストールします (リポジトリ パスにいることを確認してください)。
$ rbenv install
ポストグレSQL
$ brew install postgresql
オープンサーチ
$ brew install opensearch
次のコマンドを使用して gem と 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
例: 「My New People Finder」
config.default_url_options
例: { host: mail.peoplefinder.example.com }
config.open_search_url
本番環境には必須 (下記の「検索」セクションを参照)
config.support_email
例: '[email protected]'
config.send_reminder_emails
リマインダー電子メールが cronjobs によって送信される場合は true に設定します。
システムでは、ホワイトリストのドメインを持つ電子メールへのログインが許可されます。ホワイトリストはデータベース内にあり、 PermittedDomain
モデルによって管理されます。誰かがログインできるようになる前に、少なくとも 1 つのドメインがホワイトリストに登録されている必要があります (これは開発にも当てはまります)。
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 のリストは、kubernetes シークレットにあるIP_ALLOWLIST
という環境変数に保存されます。同じ 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.open_search_url
config/application.rb などに設定する必要があります。これを設定するために使用される環境変数はMOJ_PF_ES_URL
です。上記の「構成可能な要素」を参照してください。
OpenSearch 検索をローカルで呼び出す場合は、 localhost:9200
を使用します。
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 が発生した場合は、パーソン モデルのインデックスを作成する必要があります。
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 を使用する場合は、次のコマンドを使用できます。
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 )
peoplefinder:db:reload
の一部として呼び出される rake タスクpeoplefinder:data:demo
を使用して、半ランダム データを生成することもできます。 peoplefinder:demo:data
を繰り返し実行すると、作成されるサンプル グループにメンバーが追加されます。
rake -T | grep people
最新のリストを取得するには、 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 に送信されます。