工作應該基於主要分支,並發佈到主要分支。我們使用 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。