يجب أن يكون العمل مستندًا إلى الفرع الرئيسي ومرتبطًا به. نحن نستخدم عملية الموافقة على 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
Postgresql
$ brew install postgresql
بحث مفتوح
$ brew install opensearch
استخدم الأوامر التالية لتثبيت حزم الأحجار الكريمة وجافا سكريبت ثم قم بإنشاء قاعدة البيانات
$ bin/setup
إنشاء بعض الفرق التجريبية
$ DOMAIN=fake.gov.uk bin/rake peoplefinder:data:demo
لتشغيل خادم الويب فقط دون أي وظائف في الخلفية (عادةً ما تكون كافية):
$ bin/rails server
سيكون الموقع متاحًا على http://localhost:3000.
يجب تعريفها في config/application.rb أو في ملفات .rbenviroments/ environment إذا كانت الإعدادات بحاجة إلى التحديد على أساس كل بيئة.
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
يسمح النظام بتسجيل الدخول لرسائل البريد الإلكتروني التي تحتوي على نطاقات من القائمة البيضاء. القائمة البيضاء موجودة في قاعدة البيانات، ويتم إدارتها بواسطة نموذج 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 الخاصة بوزارة العدل. يتم تخزين قائمة عناوين 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.open_search_url
، على سبيل المثال، config/application.rb. متغير البيئة المستخدم لتعيينه هو MOJ_PF_ES_URL
راجع "العناصر القابلة للتكوين" أعلاه.
استخدم localhost:9200
عند الاتصال ببحث OpenSearch محليًا.
ستستدعي الأوامر التالية في بيئات kubernetes حجرة وكيل البحث المفتوح، والتي ستستدعي بعد ذلك البحث المفتوح على AWS لقراءة البيانات أو تحديثها.
للتحقق من صحة مكدس البحث المفتوح، يمكنك استخدام ما يلي، من أي من مثيلي المضيف. سيقوم 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
أو يمكنك إنشاء الفهرس من وحدة التحكم في حالة فشل أوامر الرفع المذكورة أعلاه:
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 محليًا، ولكن يمكنك استخدام حاوية عامل إرساء كما هو مذكور أعلاه.
تلاعب
نحن نستخدم MiniMagick لذا يلزم تثبيت Imagemagick أو Graphicsmagick لمعالجة الصور ولإجراء بعض الاختبارات.
إذا كنت تستخدم الشراب يمكنك استخدام الأمر التالي:
brew install imagemagick
تخزين
بالنسبة لبيئة التطوير المحلية، يتم تخزين صور الملفات الشخصية كملفات. بالنسبة إلى البيئات المنشورة، يتم تخزين صور الملفات الشخصية في حاوية AWS S3 الخاصة بها. لا تمنح المجموعات أي أذونات جماعية لمستخدمين غير مستخدمي AWS (على سبيل المثال، خاصة). يتم الوصول إلى الصور عبر عناوين URL محددة مسبقًا ومحدودة الوقت والتي تم إنشاؤها بواسطة التطبيق.
الصور التي يتم تحميلها إلى المجموعة بواسطة التطبيق تمنع بشكل صريح القراءة لمجموعة AWS "الجميع" باستخدام تكوين CarrierWave في مُهيئه - الإعداد الافتراضي لهذا التكوين هو صحيح/عام.
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: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.