الفرق بين المراجعتين لصفحة: «Rails/configuring»
جميل-بيلوني (نقاش | مساهمات) أنشأ الصفحة ب'ضبط تطبيقات ريلز يغطي هذا الدليل ميزات الضبط والتهيئة المتاحة لتطبيقات ريلز. بعد قراءة هذا ا...' |
جميل-بيلوني (نقاش | مساهمات) لا ملخص تعديل |
||
سطر 170: | سطر 170: | ||
* <code>config.i18n.load_path</code>: يعيّن المسار الذي يستخدمه ريلز للبحث عن الملفات المحليّة، وهي بشكل افتراضي تساوي <code>config/locales/*.{yml,rb}</code>. | * <code>config.i18n.load_path</code>: يعيّن المسار الذي يستخدمه ريلز للبحث عن الملفات المحليّة، وهي بشكل افتراضي تساوي <code>config/locales/*.{yml,rb}</code>. | ||
* <code>config.i18n.fallbacks</code>: يعيّن السلوك الاحتياطي للترجمات المفقودة، وهذه 3 أمثلة استخدام لهذا الخيار: | * <code>config.i18n.fallbacks</code>: يعيّن السلوك الاحتياطي للترجمات المفقودة، وهذه 3 أمثلة استخدام لهذا الخيار: | ||
** يمكنك تعيين الخيار على <code>true</code> لاستخدام المحلي الافتراضي: | ** يمكنك تعيين الخيار على <code>true</code> لاستخدام المحلي الافتراضي: | ||
<syntaxhighlight lang="rails"> | <syntaxhighlight lang="rails"> | ||
سطر 187: | سطر 188: | ||
== ضبط السجل الفعال == | == ضبط السجل الفعال == | ||
يتضمّن config.active_record مجموعة متنوّعة من خيارات الضبط: | يتضمّن <code>config.active_record</code> مجموعة متنوّعة من خيارات الضبط: | ||
* | * <code>config.active_record.logger</code>: يقبل مسجلًا يتطابق مع الواجهة <code>Log4r</code> أو الصنف <code>Logger</code> الافتراضي الذي يخص روبي، والذي يمرر بعد ذلك إلى أي اتصالات قاعدة بيانات جديدة تم إنشاؤها. يمكنك استرداد هذا السجل من خلال استدعاء <code>logger</code> إما في صنف نموذج السجل الفعال أو في نسخة نموذج السجل الفعال. ويمكنك تعيينه إلى القيمة <code>nil</code> لتعطيل التسجيل. | ||
* | * <code>config.active_record.primary_key_prefix_type</code>: يتيح لك ضبط تسمية أعمدة المفاتيح الأساسيّة، افتراضيًا، يفترض ريلز أن أعمدة المفاتيح الأساسيّة تسمى <code>id</code> (وليس هنالك حاجة لتعيين هذا الخيار)، ويوجد خيارات آخران: | ||
** :table_name | **<code>:table_name</code>: سيجعل المفتاح الرئيسي للصنف <code>Customer</code> هو <code>customerid</code>. | ||
** :table_name_with_underscore | **<code>:table_name_with_underscore</code>: سيجعل المفتاح الأساسي للصنف <code>Customer</code> هو <code>customer_id</code>. | ||
* | * <code>config.active_record.table_name_prefix</code>: يتيح لك تعيين سلسلة عامة (global) لارفاقها بأسماء الجداول. إذا قمت تعيين هذا الضبط إلى <code>northwest_</code>، فإن الصنف <code>Customer</code> سيبحث عن <code>northwest_customers</code> كجدول له. وبشكل افتراضي يساوي سلسلة نصيّة فارغة. | ||
* | * <code>config.active_record.table_name_suffix</code>: يتيح لك تعيين سلسلة عامة (global) لإلحاقها بأسماء الجداول،. إذا قمت تعيين هذا الضبط إلى <code>_northwest</code> فإن الصنف <code>Customer</code> سيبحث عن <code>customers_northwest</code> كجدول له. وبشكل افتراضي يساوي سلسلة نصيّة فارغة. | ||
* | * <code>config.active_record.schema_migrations_table_name</code>: يتيح لك تعيين سلسلة نصيّة لاستخدامها كاسم جدول تهجيرات المخطط (schema migrations table). | ||
* | * <code>config.active_record.internal_metadata_table_name</code>: يتيح لك تعيين سلسلة نصيّة لاستخدامها كاسم جدول البيانات الأوليّة الداخلية. | ||
* | * <code>config.active_record.protected_environments</code>: يتيح لك تعيين مصفوفة من أسماء البيئات التي ينبعي فيها حظر الإجراءات المدمرة (destructive actions). | ||
* | * <code>config.active_record.pluralize_table_names</code>: يحدد ما إذا كان ريلز سيبحث عن أسماء الجداول المفردة أو الجمع في قاعدة البيانات. إذا تم تعيينه على <code>true</code> (الافتراضي)، فسيستخدم الصنف <code>Customer</code> الجدول <code>customers</code> وإذا كانت <code>false</code>، فسيستخدم الصنف <code>Customer</code> الجدول <code>customer</code>. | ||
* | * <code>config.active_record.default_timezone</code>: يحدد ما إذا كان سيُستخدم <code>Time.local</code> (إذا عيّن إلى القيمة <code>:local</code>) أو <code>Time.utc</code> (إذا عيّن إلى القيمة <code>:utc</code>) عند سحب التواريخ والأوقات من قاعدة البيانات. القيمة الافتراضية لهذا الخيار هي <code>:utc</code>. | ||
* | * <code>config.active_record.schema_format</code>: يتحكم في التنسيق من أجل تفريغ مخطط قاعدة البيانات إلى ملف. والخيارات هي <code>:ruby</code> (الافتراضي) لإصدار مستقل لقاعدة البيانات يعتمد على عمليات التهجير، أو <code>:sql</code> لمجموعة من تعليمات [[SQL]] (التي يمكن أن تعتمد على قاعدة البيانات). | ||
* | * <code>config.active_record.error_on_ignored_order</code>: يحدد ما إذا كان ينبغي رفع الخطأ إذا تم تجاهل ترتيب الاستعلام أثناء استعلام مجموعة واحدة. الخيارات هي <code>true</code> (رفع خطأ) أو <code>false</code> (تحذير)، وبشكل افتراضي تساوي <code>false</code>. | ||
* | * <code>config.active_record.timestamped_migrations</code>: تتحكم ما إذا كان يتم ترقيم عمليات التهجير باستخدام أرقام مسلسلة أو مع طوابع زمنيّة (timestamps). بشكل افتراضي تساوي <code>true</code> لاستخدام الطوابع الزمنية، والتي يفضل استخدامها إذا كان هنالك العديد من المطورين الذي يعملون على نفس التطبيق. | ||
* | * <code>config.active_record.lock_optimistically</code>: يتحكم ما إذا كان السجل الفعال سيستخدم القفل المستبشر (optimistic locking) أم لا. وهو <code>true</code> بشكل افتراضي. | ||
* | * <code>config.active_record.cache_timestamp_format</code>: يتحكم في تنسيق قيمة البصمة الزمنية (timestamp) في مفتاح ذاكرة التخزين المؤقت. وبشكل افتراضي يساوي <code>:nsec</code>. | ||
* | * <code>config.active_record.record_timestamps</code>: هو قيمة منطقيّة تتحكّم في ما إذا كان هنالك طابع زمني على عمليات الإنشاء والتحديث في نموذج. وهو بشكل افتراضي <code>true</code>. | ||
* | * <code>config.active_record.partial_writes</code>: هو قيمة منطقيّة وتتحكّم ما إذا كانت تُستخدم عمليات الكتابة الجزئية أم لا (بمعنى ما إذا كانت التحديثات تعيّن الخاصيات المتسخة [dirty]). لاحظ أنه عند استخدام عمليات الكتابة الجزئية، يجب عليك استخدام القفل المستبشر <code>config.active_record.lock_optimistically</code> نظرًا لأن التحديثات المتزامنة قد تكتب الخاصيات استنادًا إلى حالة قراءة تالفة. بشكل افتراضي يساوي <code>true</code>. | ||
* | * <code>config.active_record.maintain_test_schema</code>: هي قيمة منطقيّة تتحكم في ما إذا كان السجل الفعال يجب أن يحاول تحديث مخطط قاعدة بيانات الاختبار (test database schema) مع db/schema.rb (أو db/structure.sql) عند تشغيل الاختبارات. بشكل افتراضي يساوي <code>true</code>. | ||
* | * <code>config.active_record.dump_schema_after_migration</code>: هو راية تتحكّم في ما إذا كان يجب أن يحدث تفريغ المخطّط (db/schema.rb أو db/structure.sql) عند تشغيل عمليات التهجير. ويعيّن هذه الراية إلى القيمة <code>false</code> في config/environments/production.rb المنشئ بواسطة ريلز. والقيمة الافتراضيّة هي true إذا لم يعيّن هذا الضبط. | ||
* | * <code>config.active_record.dump_schemas</code>: يتحكّم في ما هي مخططات قاعدة البيانات التي ستفرّغ عند استدعاء <code>db:structure:dump</code>. الخيارات هي: <code>:schema_search_path</code> (وهو الافتراضي) والذي يفرّغ أي مخططات مدرجة في <code>schema_search_path</code>، <code>:all</code> الذي يفرّغ دائمًا جميع المخططات بغض النظر عن <code>schema_search_path</code> أو سلسلة نصيّة من المخططات المفصولة بفواصل. | ||
* | * <code>config.active_record.belongs_to_required_by_default</code>: هي قيمة منطقيّة تتحكّم في ما إذا كان السجل يفشل في التحقق (validation) إذا لم يكن هنالك ارتباط من النوع belongs_to ([[Rails/association basics#.D8.A7.D8.B1.D8.AA.D8.A8.D8.A7.D8.B7 .D8.A7.D9.84.D8.A7.D9.86.D8.AA.D9.85.D8.A7.D8.A1 .28belongs to.29|ارتباط انتماء]]). | ||
* | * <code>config.active_record.warn_on_records_fetched_greater_than</code>: يتيح تعيين حدًّا للتحذير من أجل حجم نتيجة الاستعلام. إذا تجاوز عدد السجلات التي تم إرجاعها بواسطة استعلام الحد المسموح، فسيُسجّل تحذير. ويمكن استخدام هذا الضبط لتحديد الاستعلامات التي تتسبب في حدوث تضخم في الذاكرة. | ||
* | * <code>config.active_record.index_nested_attribute_errors</code>: يسمح للأخطاء في [[Rails/association basics#.D8.A7.D8.B1.D8.AA.D8.A8.D8.A7.D8.B7 .D8.A7.D9.84.D8.AA.D8.B9.D8.AF.D8.AF.D9.8A.D8.A9 .28has many.29|الارتباطات has_many]] المتداخلة أن تُعرض مع فهرس بالإضافة إلى الخطأ. بشكل افتراضي يساوي <code>false</code>. | ||
* | * <code>config.active_record.use_schema_cache_dump</code>: يتيح للمستخدمين الحصول على معلومات التخزين المؤقت للمخطط من db/schema_cache.yml (المنشئ بواسطة <code>bin/rails db:schema:cache:dump</code>) بدلًا من الاضطرار إلى إرسال استعلام إلى قاعدة البيانات للحصول على هذه المعلومات. بشكل افتراضي يساوي <code>true</code>. | ||
يضيف محوّل MySQL خيار ضبط إضافي آخر: | يضيف محوّل MySQL خيار ضبط إضافي آخر: | ||
* ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans يتحكّم ما إذا السجل | * <code>ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans</code>: يتحكّم ما إذا السجل الفعال سيَعُدُّ جميع الأعمدة <code>tinyint(1)</code> كقيم منطقيّة. بشكل افتراضي يساوي <code>true</code>. | ||
يضيف محوّل SQLite3Adapter خيار ضبط إضافي آخر: | يضيف محوّل SQLite3Adapter خيار ضبط إضافي آخر: | ||
* ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer يشير ما إذا ما إذا كانت القيم المنطقية المخزنة في قواعد بيانات sqlite3 | * <code>ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer</code>: يشير ما إذا ما إذا كانت القيم المنطقية المخزنة في قواعد بيانات sqlite3 ستُمثَّل بالشكل 1 و 0 أو 't' و 'f'. ترك الضبط <code>ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer</code> معيَّنًا للقيمة <code>false</code> قد أُهمِل. لقد استخدمت قواعد بيانات SQLite التمثيل 't' و 'f' لسلسلة القيم المنطقيّة ويجب أن تحتوي على البيانات القديمة بعد تحويلها إلى 1 و0 (التسلسل المنطقي الأصلي) وقبل تعيين هذه الراية إلى <code>true</code>. ويمكن التحويل عن طريق إعداد مهمة Rake التي تشغّل: | ||
<syntaxhighlight lang="rails"> | |||
ExampleModel.where("boolean_column = 't'").update_all(boolean_column: 1) | ExampleModel.where("boolean_column = 't'").update_all(boolean_column: 1) | ||
ExampleModel.where("boolean_column = 'f'").update_all(boolean_column: 0) | ExampleModel.where("boolean_column = 'f'").update_all(boolean_column: 0) | ||
</syntaxhighlight>لجميع النماذج وجميع الأعمدة المنطقيّة، يجب بعدها تعيين هذه الراية إلى القيمة <code>true</code> بإضافة ما يلي إلى الملف application.rb:<syntaxhighlight lang="rails"> | |||
لجميع النماذج وجميع الأعمدة المنطقيّة، يجب بعدها تعيين | |||
```ruby | ```ruby | ||
Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = true | Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = true | ||
``` | ``` | ||
</syntaxhighlight>يضيف مفرّغ المخطط (schema dumper) خيار ضبط إضافي آخر: | |||
* <code>ActiveRecord::SchemaDumper.ignore_tables</code>: يقبل مصفوفة من الجداول التي لا يجب تضمينها في أي ملف مخطط تم إنشاؤه. | |||
== ضبط إجراء التحكم (Action Controller) == | |||
يتضمّن <code>config.action_controller</code> عددًا من إعدادات الضبط هي: | |||
* <code>config.action_controller.asset_host</code>: يعيّن المضيف للأصول، وهو مفيد عند استخدام CDN لاستضافة الأصول بدلًا من خادم التطبيق نفسه. | |||
== ضبط | * <code>config.action_controller.perform_caching</code>: يضبط ما إذا كان يجب أن ينفذ التطبيق ميزات التخزين المؤقت التي يوفرها مكون متحكم الإجراء أو لا. وقيمته <code>false</code> في وضع التطوير و <code>true</code> في وضع الإنتاج. | ||
يتضمّن config.action_controller عددًا من إعدادات الضبط: | * <code>config.action_controller.default_static_extension</code>: يضبط اللاحقة المستخدمة في صفحات التخزين المؤقت. وهي بشكل افتراضي <code>.html</code>. | ||
* | * <code>config.action_controller.include_all_helpers</code>: يضبط ما إذا كان جميع مساعدي العروض متوفرين في كل مكان أو تحديد نطاقها إلى المتحكم المقابل. في حالة تعيين هذا الضبط إلى القيمة <code>false</code>، فستكون توابع <code>UsersHelper</code> متوفّرة فقط لعروض المصيَّرة كجزء من المتحكم <code>UsersController</code>. وإذا كان <code>true</code>، فإن توابع <code>UsersHelper</code> ستكون متوفّرة في كل مكان، وإن سلوك الضبط الافتراضي (عندما لا يعيّن هذا الخيار بشكل صريح كـ <code>true</code> أو <code>false</code>) هو أن كافة مساعدي العروض متوفّرة لكل متحكّم. | ||
* | * <code>config.action_controller.logger</code>: يقبل مسجلًا مطابقًا للواجهة <code>Log4r</code> أو صنف روبي <code>Logger</code> الافتراضي، والذي يُستخدم بعد ذلك لتسجيل المعلومات من متحكم الإجراء. اضبطه إلى <code>nil</code> لتعطيل التسجيل. | ||
* | * <code>config.action_controller.request_forgery_protection_token</code>: يعيّن اسم معامل الرمز (token parameter name) من أجل <code>RequestForgery</code>. وإن استدعاء <code>protect_from_forgery</code> يعيّن هذا الضبط إلى <code>:authenticity_token</code> بشكل افتراضي. | ||
* | * <code>config.action_controller.allow_forgery_protection</code>: يفعّل أو يعطّل حماية CSRF. وهو بشكل افتراضي <code>false</code> في وضع الاختبار و <code>true</code> في جميع الأوضاع الأخرى. | ||
* | * <code>config.action_controller.forgery_protection_origin_check</code>: يضبط ما إذا كان يجب التحقق من الترويسة <code>Origin</code> في طلبيات HTTP ضد أصل الموقع (site's origin) كدفاع إضافي من هجمات CSRF. | ||
* | * <code>config.action_controller.per_form_csrf_tokens</code>: يضبط ما إذا كانت رموز CSRF صالحة فقط للتابع/الإجراء الذي تم إنشاؤه له. | ||
* | * <code>config.action_controller.default_protect_from_forgery</code>: يحدد إضافة حماية التزوير على <code>ActionController:Base</code>، وهو <code>false</code> بشكل افتراضي، ولكنه مفعّل عند تحميل الإعدادات الافتراضيّة للإصدار 5.2 من ريلز. | ||
* | * <code>config.action_controller.relative_url_root</code>: يمكن استخدامه لإخبار ريلز أنك تنشر تطبيقك إلى مجلد فرعي. بشكل افتراضي يساوي <code>ENV['RAILS_RELATIVE_URL_ROOT']</code>. | ||
* | * <code>config.action_controller.permit_all_parameters</code>: يعيّن السماح لجميع المعاملات بالتعيين الشامل بشكل افتراضي. القيمة الافتراضية هي <code>false</code>. | ||
* | * <code>config.action_controller.action_on_unpermitted_parameters</code>: يفعّل التسجيل أو رفع استثناء إذا تم العثور على معاملات غير مسموح بها بشكل صريح. استعمل <code>:log</code> أو <code>:raise</code> لكل حالة على التوالي. القيمة الافتراضيّة هي <code>:log</code> في أوضاع التطوير والاختبار، و <code>false</code> في جميع الأوضاع الأخرى. | ||
* | * <code>config.action_controller.always_permitted_parameters</code>: تعيّن قائمة بالمعاملات المسموح بها بشكل افتراضي. القيم الافتراضيّة هي <code>['controller', 'action']</code> | ||
* | * <code>config.action_controller.enable_fragment_cache_logging</code>: يحدد ما إذا كان سيتم تسجيل أجزاء القراءة والكتابة لذاكرة التخزين المؤقت بشكل مفصل كالتالي: | ||
* | <syntaxhighlight lang="text"> | ||
* | |||
* | |||
Read fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/d0bdf2974e1ef6d31685c3b392ad0b74 (0.6ms) | Read fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/d0bdf2974e1ef6d31685c3b392ad0b74 (0.6ms) | ||
Rendered messages/_message.html.erb in 1.2 ms [cache hit] | Rendered messages/_message.html.erb in 1.2 ms [cache hit] | ||
Write fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/3b4e249ac9d168c617e32e84b99218b5 (1.1ms) | Write fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/3b4e249ac9d168c617e32e84b99218b5 (1.1ms) | ||
Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss] | Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss] | ||
</syntaxhighlight>افتراضيًا، يتم تعيينه إلى القيمة <code>false</code> مما ينتج عنه المخرجات التالية:<syntaxhighlight lang="rails"> | |||
افتراضيًا، يتم تعيينه | |||
``` | ``` | ||
Rendered messages/_message.html.erb in 1.2 ms [cache hit] | Rendered messages/_message.html.erb in 1.2 ms [cache hit] | ||
Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss] | Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss] | ||
``` | ``` | ||
</syntaxhighlight> | |||
== ضبط | == ضبط إجراء الإرسال (Action Dispatch) == | ||
* | * <code>config.action_dispatch.session_store</code>: يعيّن اسم المخزن المراد تخزين بيانات الجلسة فيه. وهو بشكل افتراضي <code>:cookie_store</code> وتتضمن الخيارات الصالحة الأخرى <code>:active_record_store</code> أو <code>:mem_cache_store</code> أو اسم الصنف المخصص الخاص بك. | ||
* | * <code>config.action_dispatch.default_headers</code>: هو [[Ruby/Hash|جدول Hash]] مع ترويسات HTTP التي تم تعيينها بشكل افتراضي في كل استجابة. بشكل افتراضي، معرّفة على أنها: | ||
<syntaxhighlight lang="rails"> | |||
config.action_dispatch.default_headers = { | config.action_dispatch.default_headers = { | ||
'X-Frame-Options' => 'SAMEORIGIN', | |||
'X-XSS-Protection' => '1; mode=block', | |||
'X-Content-Type-Options' => 'nosniff', | |||
'X-Download-Options' => 'noopen', | |||
'X-Permitted-Cross-Domain-Policies' => 'none', | |||
'Referrer-Policy' => 'strict-origin-when-cross-origin' | |||
} | } | ||
* | </syntaxhighlight> | ||
* | * <code>config.action_dispatch.default_charset</code>: يحدد مجموعة المحارف الافتراضيّة لكافة عمليات التصيير. يساوي <code>nil</code> بشكل افتراضي. | ||
* | * <code>config.action_dispatch.tld_length</code>: يعيّن طول TLD (نطاق المستوى الأعلى [top-level domain]) للتطبيق، وهو 1 بشكل افتراضي. | ||
* | * <code>config.action_dispatch.ignore_accept_header</code>: يُستخدم لتحديد ما إذا كان ستتجاهل قبول ترويسات من الطلب، وهو بشكل افتراضي <code>false</code>. | ||
* | * <code>config.action_dispatch.x_sendfile_header</code>: يحدد الترويسة <code>X-Sendfile</code> المخصصة لخادم معين. وهو مفيد لتسريع إرسال الملفات من الخادم، على سبيل المثال، يمكن تعيينه إلى القيمة 'X-Sendfile' لخادم أباتشي. | ||
* | * <code>config.action_dispatch.http_auth_salt</code>: يحدد القيمة الزائدة (salt value) لمصادقة طلبيات HTTP. وهي بشكل افتراضي 'http authentication'. | ||
* | * <code>config.action_dispatch.signed_cookie_salt</code>: يعيّن القيمة الزائدة (salt value) لملفات تعريف الارتباط الموقعة، وهو يساوي بشكل افتراضي 'signed cookie'. | ||
* | * <code>config.action_dispatch.encrypted_cookie_salt</code>: يعيّن القيمة الزائدة (salt value) لملفات تعريف الارتباط المشفّرة. وهو يساوي بشكل افتراضي 'encrypted cookie'. | ||
* config.action_dispatch.authenticated_encrypted_cookie_salt يعيّن | * <code>config.action_dispatch.encrypted_signed_cookie_salt</code>: يعيّن القيمة الزائدة (salt value) لملفات تعريف الارتباط الموقعة والمشفّرة. وهو يساوي بشكل افتراضي 'signed encrypted cookie'. | ||
* | * <code>config.action_dispatch.authenticated_encrypted_cookie_salt</code>: يعيّن القيمة الزائدة لملفات تعريف الارتباط المصادق عليها والمشفّرة. وهو يساوي بشكل افتراضي 'authenticated encrypted cookie'. | ||
* | * <code>config.action_dispatch.encrypted_cookie_cipher</code>: يعيّن التشفير المراد استخدامه في ملفات تعريف الارتباط المشفّرة. وهو بشكل افتراضي "aes-256-gcm". | ||
* | * <code>config.action_dispatch.signed_cookie_digest</code>: يعيّن خوارزمية التشفير للقيم المختصرة المشفرة (digest) المراد استخدامها في ملفات تعريف الارتباط الموقعة. وهو "SHA1" بشكل افتراضي. | ||
* | * <code>config.action_dispatch.cookies_rotations</code>: يسمح بتدوير الأسرار، والتشفيرات، والقيم المشفرة المختصرة لملفات تعريف الارتباط المشفّرة والموقعة. | ||
* | * <code>config.action_dispatch.use_authenticated_cookie_encryption</code>: يتحكّم ما إذا كانت ملفات تعريف الارتباط المشفّرة والموقعة تستخدم التشفير AES-256-GCM أو التشفير AES-256-CBC القديم. وهو <code>true</code> بشكل افتراضي. | ||
* | * <code>config.action_dispatch.perform_deep_munge</code>: يضبط ما إذا كان يجب تنفيذ التابع <code>deep_munge</code> على المعاملات. انظر دليل [[Rails/security|الأمن]] لمزيد من المعلومات. القيمة الافتراضية لهذا الضبط هي <code>true</code>. | ||
* <code>config.action_dispatch.rescue_responses</code>: يضبط الاستثناءات التي عيّنت لحالة HTTP، وهي تقبل جدول hash ويمكنك تحديد أزواج من استثناء/حالة. وهو بشكل افتراضي معرّف على أنه: | |||
<syntaxhighlight lang="rails"> | |||
config.action_dispatch.rescue_responses = { | config.action_dispatch.rescue_responses = { | ||
'ActionController::RoutingError' => :not_found, | |||
'AbstractController::ActionNotFound' => :not_found, | |||
'ActionController::MethodNotAllowed' => :method_not_allowed, | |||
'ActionController::UnknownHttpMethod' => :method_not_allowed, | |||
'ActionController::NotImplemented' => :not_implemented, | |||
'ActionController::UnknownFormat' => :not_acceptable, | |||
'ActionController::InvalidAuthenticityToken' => :unprocessable_entity, | |||
'ActionController::InvalidCrossOriginRequest' => :unprocessable_entity, | |||
'ActionDispatch::Http::Parameters::ParseError' => :bad_request, | |||
'ActionController::BadRequest' => :bad_request, | |||
'ActionController::ParameterMissing' => :bad_request, | |||
'Rack::QueryParser::ParameterTypeError' => :bad_request, | |||
'Rack::QueryParser::InvalidParameterError' => :bad_request, | |||
'ActiveRecord::RecordNotFound' => :not_found, | |||
'ActiveRecord::StaleObjectError' => :conflict, | |||
'ActiveRecord::RecordInvalid' => :unprocessable_entity, | |||
'ActiveRecord::RecordNotSaved' => :unprocessable_entity | |||
} | } | ||
</syntaxhighlight>سيُعيّن أي استثناء لم يُضبَط إلى الخطأ 500 الداخلي في الخادم (Internal Server Error). | |||
* <code>ActionDispatch::Callbacks.before</code>: تأخذ كتلة من التعليمات البرمجيّة لتشغيلها قبل الطلب. | |||
* <code>ActionDispatch::Callbacks.after</code>: تأخذ كتلة من التعليمات البرمجيّة لتشغيلها بعد الطلب. | |||
== ضبط إجراء العرض == | |||
* | يتضمن <code>config.action_view</code> مجموعة صغيرة من إعدادات الضبط: | ||
* <code>config.action_view.cache_template_loading</code>: يتحكّم في ما إذا كان يجب إعادة تحميل القوالب في كل طلب أو لا. القيمة الافتراضية لهذا الضبط هي نفس القيمة التي ضُبَط في <code>config.cache_classes</code>. | |||
* <code>config.action_view.field_error_proc</code>: يوفّر مولّد HTML لعرض الأخطاء التي تأتي من نموذج فعال (Active Model)، وهو بشكل افتراضي: | |||
<syntaxhighlight lang="rails"> | |||
* | |||
Proc.new do |html_tag, instance| | Proc.new do |html_tag, instance| | ||
%Q(<div class="field_with_errors">#{html_tag}</div>).html_safe | |||
end | |||
</syntaxhighlight> | |||
* <code>config.action_view.default_form_builder</code>: يخبر ريلز أي باني نموذج يراد استخدامه بشكل افتراضي. القيمة الافتراضية له هي <code>ActionView::Helpers::FormBuilder</code>. إذا أردت تحميل صنف باني النموذج بعد التهيئة (لكي يعاد تحميله على كل طلب قيّد التطوير)، يمكنك تمريره كسلسة نصيّة. | |||
* | * <code>config.action_view.logger</code>: يقبل مسجل يتطابق مع الواجهة <code>Log4r</code> أو صنف روبي <code>Logger</code> الافتراضي، والذي يُستخدَم بعد ذلك لتسجيل المعلومات من إجراء العرض. اضبطه إلى القيمة <code>nil</code> لتعطيل التسجيل. | ||
* | * <code>config.action_view.erb_trim_mode</code>: يسمح باستخدام الوضع trim من قبل ERB. وهو بشكل افتراضي "-"، والذي يعمل على تشذيب مسافات التذييل والسطر الجديد عند استخدام <code><%= -%></code> أو <code><%= =%></code>. راجع توثيق [http://www.kuwata-lab.com/erubis/users-guide.06.html#topics-trimspaces Erubis] لمزيد من المعلومات. | ||
* | * <code>config.action_view.embed_authenticity_token_in_remote_forms</code>: يسمح لك بتعيين السلوك الافتراضي لـ <code>authenticity_token</code> في النماذج مع <code>remote:true</code>. وهو <code>false</code> بشكل افتراضي، مما يعني أن النماذج البعيدة لن تتضمن <code>authenticity_token</code> وهو أمر مفيد عندما تخزّن أجزاء النموذج بشكل مؤقت في الذاكرة. تحصل النماذج البعيدة على المصادقة من الوسم <code>[[HTML/meta|<meta>]]</code>، لذلك لا يكون الدمج ضروريًا إلا إذا رغبت بدعم المتصفحات بدون [[JavaScript]]. وفي مثل هذه الحالة، يمكنك تمرير <code>authenticity_token: true</code> كخيار النموذج أو تعيين خيار الضبط هذا إلى القيمة <code>true</code>. | ||
* | * <code>config.action_view.prefix_partial_path_with_controller_namespace</code>: يحدَّد ما إذا كان يتم البحث عن أجزاء من مجلد فرعي أم لا في القوالب المصيَّرة من متحكمات مجالات الأسماء. فعلى سبيل المثال، افترض وجود متحكم يسمى <code>Admin::ArticlesController</code> الذي يصيِّر هذا القالب: | ||
* | <syntaxhighlight lang="html"> | ||
<%= render @article %> | <%= render @article %> | ||
</syntaxhighlight>الإعداد الافتراضي هو <code>true</code>، والذي يستخدم الجزئية الموجودة في /admin/articles/_article.erb، وعند تعيين القيمة إلى <code>false</code> فسيُصيَّر /articles/_article.erb والذي هو نفس السلوك التصيير من متحكم ليس من مجال الاسم مثل <code>ArticlesController</code>. | |||
* <code>config.action_view.raise_on_missing_translations</code>: يحدد ما إذا كان يجب رفع خطأ للتحويلات المفقودة. | |||
* <code>config.action_view.automatically_disable_submit_tag</code>: يحدد ما إذا كان يجب تعطيل <code>submit_tag</code> (وسم الإرسال) عند النقر. وهو بشكل افتراضي <code>true</code>. | |||
* <code>config.action_view.debug_missing_translation</code>: يحدد ما إذا كان سيغلف مفتاح التحويلات المفقودة في الوسم <code>[[HTML/span|<nowiki><span></nowiki>]]</code> أو لا، وهو <code>true</code> بشكل افتراضي. | |||
* <code>config.action_view.form_with_generates_remote_forms</code>: يحدد ما إذا كان <code>form_with</code> يولّد نماذج عن بعد أم لا، وهو <code>true</code> بشكل افتراضي. | |||
* <code>config.action_view.form_with_generates_ids</code>: يحدد ما إذا كان <code>form_with</code> يولد معرفات على المدخلات، وهو <code>true</code> بشكل افتراضي. | |||
== ضبط إجراء المراسلة == | |||
هنالك عدد من الإعدادات المتاحة في الضبط <code>config.action_mailer</code>: | |||
* config.action_mailer.logger يقبل مسجلًا مطابقًا لواجهة Log4r أو صنف Ruby Logger الافتراضي، والذي يُستخدم بعد ذلك لتسجيل المعلومات من Mailer الإجراء. اضبطه على nil لتعطيل التسجيل. | |||
* config.action_mailer.smtp_settings يتيح ضبط تفصيلي لتابع :smtp للتسليم، وهو يقبل hash من الخيارات، والتي يمكن أن تشمل أي من هذه الخيارات: | |||
== ضبط | |||
هنالك عدد من الإعدادات المتاحة | |||
* | |||
* | |||
** :address - تسمح لك باستخدام خادم بريد بعيد، كل ما عليك فعله هو تغيير إعداد "localhost" الافتراضي. | ** :address - تسمح لك باستخدام خادم بريد بعيد، كل ما عليك فعله هو تغيير إعداد "localhost" الافتراضي. | ||
** :port - في حالة عدم عمل خادم البريد الخاص على المنفذ 25، يمكنك تغييره. | ** :port - في حالة عدم عمل خادم البريد الخاص على المنفذ 25، يمكنك تغييره. | ||
سطر 380: | سطر 347: | ||
** :ssl/:tls - لتمكين اتصال SMTP ليستخدم SMTP/TLS (SMTPS: SMTP عبر اتصال TLS مباشر). | ** :ssl/:tls - لتمكين اتصال SMTP ليستخدم SMTP/TLS (SMTPS: SMTP عبر اتصال TLS مباشر). | ||
* | * config.action_mailer.sendmail_settings يسمح ضبط مفصّل لتابع تسليم sendmail، وهي تقبل Hash من الخيارات، والتي يمكن أن تشكل أي من هذه الخيارات: | ||
** :location - موقع sendmail التنفيذي، وهو بشكل افتراضي /usr/sbin/sendmail. | ** :location - موقع sendmail التنفيذي، وهو بشكل افتراضي /usr/sbin/sendmail. | ||
** :arguments - معاملات سطر الأوامر، بشكل افتراضي يساوي -i. | ** :arguments - معاملات سطر الأوامر، بشكل افتراضي يساوي -i. | ||
* | * config.action_mailer.raise_delivery_errors يحدد ما إذا كان سيُرفع خطأ في تعذّر إكمال تسليم البريد الإلكتروني، وهو true بشكل افتراضي. | ||
* | * config.action_mailer.delivery_method يحدد تابع التسليم وهو :smtp بشكل افتراضي. راجع قسم الضبط في دليل Action Mailer للمزيد من المعلومات. | ||
* | * config.action_mailer.perform_deliveries يحدد إذا كان البريد سيُسلّم بالفعل وهو true بشكل افتراضي، ومن المستحسن تعيينه على false للاختبار. | ||
* | * config.action_mailer.default_options يكوّن الإعدادات الافتراضيّة لـ Mailer الإجراء بشكل افتراضي، ويُستخدم لتعيين الخيارات مثل from أو reply_to لكل mailer، وهو افتراضي لـ: | ||
mime_version: "1.0", | mime_version: "1.0", | ||
سطر 400: | سطر 367: | ||
} | } | ||
* | * <code>config.action_mailer.observers</code>: مراقبي السجل الذين سيتم إبلاغهم عند تسليم البريد. | ||
config.action_mailer.observers = ["MailObserver"] | config.action_mailer.observers = ["MailObserver"] | ||
* | * <code>config.action_mailer.interceptors</code>: معترضات السجل والتي سيتم استدعاؤهم قبل ارسال البريد. | ||
config.action_mailer.interceptors = ["MailInterceptor"] | config.action_mailer.interceptors = ["MailInterceptor"] | ||
* | * <code>config.action_mailer.preview_path</code>: يحدد موقع معاينات البريد الالكتروني. | ||
config.action_mailer.preview_path = "#{Rails.root}/lib/mailer_previews" | config.action_mailer.preview_path = "#{Rails.root}/lib/mailer_previews" | ||
* | * <code>config.action_mailer.show_previews</code>: يفعّل أو يعطّل معاينات البريد، وهو true بشكل افتراضي في وضع التطوير. | ||
config.action_mailer.show_previews = false | config.action_mailer.show_previews = false | ||
* | * <code>config.action_mailer.deliver_later_queue_name</code>: يحدد اسم الطابور (queue) للمرسلين، وهو بشكل افتراضي mailers. | ||
* | * <code>config.action_mailer.perform_caching</code>: يحدد ما إذا كان يجب أن تقوم قوالب الإرسال بإجراء تخزين مؤقت للأجزاء أو لا، وهو false بشكل افتراضي في جميع البيئات. | ||
== إعداد دعم النشط == | == إعداد دعم النشط == |
مراجعة 08:43، 10 مارس 2019
ضبط تطبيقات ريلز
يغطي هذا الدليل ميزات الضبط والتهيئة المتاحة لتطبيقات ريلز. بعد قراءة هذا الدليل، ستتعلم:
- كيفية ضبط سلوك تطبيقات ريلز.
- كيفية إضافة شيفرة مصدريّة إضافية لتنفيذها وقت بدء تشغيل التطبيق.
مواقع شيفرة التهيئة والضبط
يوفر ريلز أربعة مواضع رئيسيّة لوضع الشيفرة المصدريّة للتهيئة:
- config/application.rb
- ملفات الضبط (configuration) الخاصة بالبيئة
- المهيآت (Initializers)
- ما بعد المهيآت (After-initializers)
تشغيل شيفرة برمجية قبل ريلز
في الحدث النادر الذي يحتاج تطبيقك لتشغيل بعض الشيفرات البرمجية قبل تحميل ريلز نفسه، ضعها قبل استدعاء require 'rails/all'
في config/application.rb.
إعداد مكونات ريلز
بشكل عام، تعني مهمة إعداد ريلز إعداد مكونات ريلز بالإضافة إلى ريلز نفسه، يسمح لك ملف الضبط config/application.rb وملفات الضبط الخاصة بالبيئة (مثل الملف config/environments/production.rb) بتحديد الإعدادات المتنوّعة التي تريد تمريرها إلى كافة المكونات.
على سبيل المثال، يمكنك إضافة هذا الإعداد إلى الملف config/application.rb:
config.time_zone = 'Central Time (US & Canada)'
هذه إعدادات لريلز نفسه، إذا كنت ترغب في تمرير الإعدادات إلى مكونات Rails فرديّة، فيمكنك القيام بذلك عبر نفس كائن الضبط في config/application.rb:
config.active_record.schema_format = :ruby
سيستخدم ريلز هذا الإعداد لضبط السجل الفعال.
إعدادات ريلز العامة
ستُستدعى توابع الإعدادات هذه على الكائن Rails::Railtie
مثل صنف فرعي من Rails::Engine
أو Rails::Application
.
config.after_initialize
: يأخذ الكتلة التي سيتم تنفيذها بعدما ينتهي ريلز من تهيئة التطبيق، ويتضمّن هذا تهيئة الإطار نفسه، والمحركات، وجميع مهيئات التطبيق في config/initializers، لاحظ أن هذه الكتلة ستُنفَّذ لمهام البداية، وهي مفيدة لضبط القيم المعدّة بواسطة مهيئات أخرى:
config.after_initialize do
ActionView::Base.sanitized_allowed_tags.delete 'div'
end
config.asset_host
: يعيّن المضيف للأصول (assets)، وهو مفيدة عندما يُستخدم CDN لاستضافة الأصول أو عندما تريد العمل حول قيود التزامن المضمنة في المتصفحات باستخدام أسماء النطاقات المستعارة المختلفة. وهي نسخة مختصرة لـconfig.action_controller.asset_host
.config.autoload_once_paths
: يقبل مصفوفة من المسارات التي سيحمل ريلز تلقائيًّا الثوابت منها التي لن تمسح لكل طلب، وهي مناسبة إذا كانconfig.cache_classes
يساويfalse
، والتي هي الحالة الافتراضيّة لوضع التطوير. وخلاف ذلك، يحدث كل التحميل التلقائي مرّة واحدة فقط، ويجب أن تكون جميع عناصر هذه المصفوفة فيautoload_paths
. بشكل افتراضي هي مصفوفة فارغة.config.autoload_paths
: يقبل مصفوفة من المسارات التي يحمل ريلز بشكل تلقائي الثوابت منها، وبشكل افتراضي هي جميع المجلدات داخل app، ولم يعد من المستحسن ضبط هذا، راجع الثوابت المحملة والمعاد تحميلها تلقائيًّا.config.cache_classes
: يتحكم ما إذا كان يجب إعادة تحميل أصناف التطبيق والوحدات في كل طلب، وبشكل افتراضي تكون قيمتهاfalse
في وضع التطوير وtrue
في أوضاع الاختبار والإنتاج.config.beginning_of_week
: يعيّن بداية الأسبوع الافتراضيّة للتطبيق، وهو يقبل رمزًا يمثِّل يوم أسبوع صحيح (على سبيل المثال :monday
).config.cache_store
: يضبط أي تخزين مؤقت يراد استخدامه في ريلز. تتضمن الخيارات أحد الرموز التالية: :memory_store
، أو:file_store
، أو:mem_cache_store
، أو :null_store
أو كائن يطبّق واجهة برمجة التطبيقات لذاكرة التخزين المؤقت، ويكون افتراضيًا مساويًا إلى :file_store
.config.colorize_logging
: يحدد استخدام رموز ألوان ANSI أو لا عند تسجيل المعلومات، وقيمته الافتراضية هيtrue
.config.consider_all_requests_local
: هو راية. إذا كان مساوي للقيمةtrue
، فأي خطأ سيؤدي إلى تفريغ معلومات التنقيح في استجابة HTTP، وسيعّرض متحكمRails::Info
سياق وقت التشغيل للتطبيق في /rails/info/properties. وقيمتهtrue
بشكل افتراضي في وضع التطوير والاختبار، وfalse
في وضع الإنتاج. وللتحكم به بشكل دقيق، اضبط هذه الراية إلى القيمةfalse
ونفّذlocal_request?
في المتحكم لتحديد أي طلبات يجب توفير معلومات التنقيح على الأخطاء.config.console
: يسمح لك بتعيين الصنف الذي سيُستخدم كطرفية عند تنفيذrails console
، ومن الأفضل تنفيذه في الكتلةconsole
.
console do
# فقط console تستدعى هذه الكتلة عند تنفيذ
# هنا pry وبذلك يمكننا بأمان طلب
require "pry"
config.console = Pry
end
config.eager_load
: عندما تكون قيمتهtrue
، ستحمّل جميع تسجيلاتconfig.eager_load_namespaces
بشكل حثيث. ويتضمن هذا تطبيقك، والمحركات، وأطر ريلز وأي مجالات أسماء مسجلة (registered namespace) أخرى.
config.eager_load_namespaces
: يسّجل مجالات الأسماء التي ستحمّل بشكل حثيث عندما يكونconfig.eager_load
مساويًا إلى القيمةtrue
. يجب أن تستجيب جميع مجالات الأسماء إلى التابعeager_load!
.config.eager_load_paths
: يقبل مصفوفة من المسارات التي سيحمّل ريلز منها عند بدء التشغيل بشكل حثيث إذا كانت أصناف ذاكرة التخزين المؤقت مفعّلة. تُعيَّن قيمته الافتراضية إلى كل مجلد في المجلد app الخاصة بالتطبيق.config.enable_dependency_loading
: عندما يكونtrue
، فسيُفعَّل التحميل التلقائي، حتى إذا كان التطبيق محمل بشكل حثيث وكانconfig.cache_classes
مضبوطًا إلى القيمةtrue
. قيمته الافتراضية هيfalse
.config.encoding
: تعمل على إعداد الترميز على مستوى التطبيق، وهي بشكل افتراضي تساوي UTF-8.config.exceptions_app
: تعيّن استثناءات التطبيق المستدعية بواسطة الوسيطShowException
عند حدوث الاستثناء. قيمته الافتراضية هيActionDispatch::PublicExceptions.new(Rails.public_path)
.config.debug_exception_response_format
: تعيّن التنسيق المستخدم في الاستجابات عند حدوث الأخطاء في وضع التطوير. قيمته الافتراضية هي: :api
لتطبيقات ذات الواجهة البرمجية فقط و :default
للتطبيقات العادية.config.file_watcher
: هو الصنف المستخدم للكشف عن تحديثات الملف في نظام الملفات عندما يكونconfig.reload_classes_only_on_change
مضبوطًا إلى القيمةtrue
. ويأتي ريلز معActiveSupport::FileUpdateChecker
- الافتراضي -، وActiveSupport::EventedFileUpdateChecker
(يعتمد هذا على الجوهرة listen) ويجب أن تتوافق الأصناف المخصصة مع واجهة برمجة التطبيقاتActiveSupport::FileUpdateChecker
.config.filter_parameters
: يُستخدم لتصفيّة المعاملات التي لا تريد عرضها في السجلات، مثل كلمات المرور وأرقام بطاقات الائتمان، وبشكل افتراضي، يصفي ريلز كلمات المرور عن طريق إضافةRails.application.config.filter_parameters += [:password]
في config/initializers/filter_parameter_logging.rb. وتعمل عملية ترشيح المعاملات من خلال مطابقة التعبير النمطي بشكل جزئي.config.force_ssl
: يجبر جميع الطلبات أن تُخدم عبر HTTPS عن طريق استخدام الوسيطActionDispatch::SSL
، ويعيّنconfig.action_mailer.default_url_options
ليكون{ protocol: 'https' }
. ويمكن ضبط ذلك عن طريق الإعدادconfig.ssl_options
، - يمكنك مراجعة توثيقActionDispatch::SSL
لمزيد من المعلومات.config.log_formatter
: يعّرف منسّق مسجّل ريلز، وهذا الخيار الافتراضي لنسخةActiveSupport::Logger::SimpleFormatter
لجميع الأوضاع، وإذا عيّنت قيمة للإعدادconfig.logger
، فيجب عليك أن تمرر قيمة المنسّق (formatter) إلى المسجّل قبل تغليفه في النسخةActiveSupport::TaggedLogging
، ولن يفعل ريلز ذلك بالنيابة عنك.config.log_level
: يعرّف مستوى تفصيل مسجّل ريلز. القيمة الافتراضية هي :debug
لجميع البيئات، ومستويات السجل المتوافرة هي::debug
، و:info
، و:warn
، و:error
، و :fatal
، و :unknown
.config.log_tags
: يقبل قائمة من: التوابع التي يستجيب لها كائن الطلبrequest
، أو كائن من النوعProc
يقبل كائن الطلبrequest
، أو شيئًا يستجيب إلىto_s
. هذا يجعل من وضع علامة على أسطر السجل أسهل مع تنقيح المعلومات مثل النطاق الفرعي و معرّف الطلب - وكلاهما مفيد للغاية في تنقيح تطبيقات متعددة المستخدمين في بيئة الإنتاج.config.logger
: هو السجل الذي سيُستخدم لـRails.logger
وأي تسجيل ريلز ذا صلة مثلActiveRecord::Base.logger
. القيمة الافتراضية له هي نسخة منActiveSupport::TaggedLogging
الذي يغلف نسخة منActiveSupport::Logger
والتي ستُسجَّل مخرجاته في المجلد log/. يمكنك توفير مسجّل مخصّص، وللحصول على التوافق الكامل، يجب عليك اتباع هذه الإرشادات:- لإعتماد منسّق، يجب عليك تعيين منسّق بشكل يدوي من قيمة الضبط config.log_formatter إلى المُسجّل.
- لدعم السجلات الموسومة (tagged logs)، يجب تغليف النسخة
log
معActiveSupport::TaggedLogging
. - لدعم الوضه الصامت (silencing)، يجب أن يتضمّن المسجّل الوحدات
LoggerSilence
وActiveSupport::LoggerThreadSafeLevel
. الصنفActiveSupport::Logger
متضمن بالفعل في هذه الوحدات.
class MyLogger < ::Logger
include ActiveSupport::LoggerThreadSafeLevel
include LoggerSilence
end
mylogger = MyLogger.new(STDOUT)
mylogger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(mylogger)
config.middleware
: يسمح لك بتهيئة وسيط التطبيق، ولقد غطيّنا هذا بالتفصيل في قسم ضبط الوسيط في الأسفل.
config.reload_classes_only_on_change
: يتيح لك تفعيل أو تعطيل إعادة تحميل الأصناف فقط عندما تتغيّر الملفات المتعقبة. وهو بشكل افتراضي يتعقّب كل شيء على مسارات إعادة التحميل ويُعيّن إلى القيمةtrue
، وإذا كانconfig.cache_classes
هوtrue
، فسيُتجاهل هذا الخيار.secret_key_base
: يُستخدَم لتحديد المفتاح الذي يسمح بالتحقق من جلسات التطبيق ضد المفتاح الآمن المعروف لمنع التلاعب. يحصل التطبيق على مفتاح تم إنشاؤه عشوائيًا في بيئات الاختبار والتطوير، ويجب على البيئات الاخرى تعيين واحد في config/credentials.yml.enc.config.public_file_server.enabled
: يضبط ريلز لخدمة ملفات ثابتة من المجلّد العام، وتكون قيمتهtrue
بشكل افتراضي، لكن في بيئة الإنتاج تكونfalse
لأنه يجب على البرنامج الخادم (على سبيل المثال Apache أو NGINX) الذي يُستخدَم لتشغيل التطبيق أن يخدّم الملفات الثابتة بدلًا من ذلك. فإذا كنت تشغّل أو تجرّب التطبيق في وضع الإنتاج باستخدام WEBrick (لا يوصى باستخدام WEBrick في الإنتاج)، عين القيمةtrue
لهذا الخيار، وإلا، فلن تتمكّن من استخدام التخزين المؤقت للصفحة وطلب الملفات الموجودة ضمن الدليل العام.config.session_store
: يعيّن الصنف الذي يجب استخدامه لتخزين الجلسة، والقيم المحتملة له هي :cookie_store
(القيمة الافتراضية)، و :mem_cache_store
و :disabled
. وهذا الأخير يخبر ريلز بعدم التعامل مع الجلسات. بشكل افتراضي مخزن ملفات تعريف الارتباط مع اسم التطبيق كمفتاح للجلّسة، ويمكن تحديد مخازن الجلسات المخصّصة:
config.session_store :my_custom_store
يجب تعرف هذا المخزن كـ ActionDispatch::Session::MyCustomStore.
config.time_zone
: يعيّن المنطقة الزمنيّة الافتراضيّة للتطبيق ويفعّل المنطقة الزمنيّة للسجل الفعال.
ضبط الأصول (Assets)
config.assets.enabled
: هو راية تتحكّم في تمكين خط الأنابيب (pipeline) الخاص بالأصول، وقيمتهtrue
بشكل افتراضي.config.assets.css_compressor
: يعرّف ضاغط شيفرة CSS المراد استعماله، ويكونsass-rails
بشكل افتراضي، والقيمة البديلة الفريدة في الوقت الحالي هي :yui
والتي تستخدم الجوهرة yui-compressor.config.assets.js_compressor
: يعرّف ضاغط شيفرة JavaScript المراد استخدامه، والقيم المحتملة له هي:closure
، و:uglifier
، و :yui
والتي تتطلّب استخدام الجواهرclosure-compiler
أوuglifier
أوyui-compressor
على التوالي.config.assets.gzip
: هو راية تمكّن من إنشاء إصدار نسخة مضغوطة بملف gzip من الأصول المترّجمة جنبًا إلى جنب مع الأصول الغير مضغوطة (non-gzipped). قيمته الافتراضية هيtrue
.config.assets.paths
: يحتوي على المسارات المستخدمة للبحث عن الأصول، سيؤدي إضافة المسارات إلى خيار الضبط هذا إلى استخدام هذه المسارات في البحث عن الأصول.config.assets.precompile
: يسمح لك بتحديد أصول إضافيّة (بخلاف application.css و application.js) والتي يجب تحويلها إلى أصول مفسرة مسبقًا (precompiled) عند تنفيذ الأمرrake assets:precompile
.config.assets.unknown_asset_fallback
: يتيح لك تعديل سلوك خط أنابيب الأصول عندما لا يكون الأصل في خط الأنابيب، إذا كنت تستخدم sprockets-rails 3.2.0 أو إصدار أحدث منه. القيمة الافتراضية هيfalse
.config.assets.prefix
: يعرّف البادئة حيث تكون الأصول موجودة فيه، وهي /assets
بشكل افتراضي.config.assets.manifest
: تعرّف المسار الكامل ليُستخدم في ملف بيان (precompiler) للأصول. وهو بشكل افتراضي ملف يسمىmanifest-<random>.json
في مجلّدconfig.assets.prefix
ضمن المجلد العام.config.assets.digest
: يتيح لك استخدام بصمات SHA256 في أسماء الأصول، وهوtrue
بشكل افتراضي.config.assets.debug
: يعطّل سَلسَلة وضغط الأصول، وهوtrue
بشكل افتراضي في development.rb.config.assets.version
: عبارة على سلسلة نصيّة اختياريّة تُستخدم في توليد SHA256 hash، ويمكن تغيير هذا لإجبار جميع الملفات على أن تكون معاد تصريفها (recompiled).config.assets.compile
: هو متغير منطقي يمكن استخدامه لتشغيل تجميع الحي لـ Sprockets في الإنتاج.config.assets.logger
: يقبل مسجلًا يتطابق مع واجهة Log4r أو مع صنف روبي Logger الافتراضي، وهو بشكل افتراضي يملك نفس ضبطات فيconfig.logger
، وعندما تكون قيمةconfig.assets.logger
تساويfalse
، فسيتوقّف تسجيل الأصول.config.assets.quiet
: يعطّل تسجيل طلبات الأصول، وهوtrue
بشكل افتراضي في development.rb.
ضبط المولدات
يسمح لك ريلز بتغيير المولدات التي تُستخدم مع أسلوب config.generators
، ويأخذ هذا الأسلوب كتلة:
config.generators do |g|
g.orm :active_record
g.test_framework :test_unit
end
هذه هي المجموعة الكاملة من الأساليب التي يمكن استخدامها في هذه الكتلة كالتالي:
assets
: تسمح لك بإنشاء الأصول عند توليد السقالة، وهيtrue
بشكل افتراضي.force_plural
: يسمح لك بوضع أسماء النموذج بصيغة الجمع، وهيfalse
بشكل افتراضي.helper
: يعرّف ما إذا كان سيتم توليد المساعدين، وهوtrue
بشكل افتراضي.integration_tool
: تعرّف ما هي أداة التكامل التي يمكن استخدامها لإنشاء اختبارات التكامل، وهي :test_unit
بشكل افتراضي.system_tests
: يعرّف الأداة التي يجب استخدامها لتوليد اختبارات النظام، وهي :test_unit
بشكل افتراضي.javascripts
: يشغّل الخطاف (hook) لملفات JavaScript في المولدات. ويُستخدم في ريلز عند عمل المولّدscaffold
. قيمته الافتراضية هي:true
.javascript_engine
: يضبط المحرّك المراد استخدامه (على سبيل المثالcoffee
) عند توليد الأصول، وهو بشكل افتراضي :js
.orm
: يعرّف أي تقنية ORM يراد استعمالها. القيمة الافتراضية هيfalse
وسيستخدم بذلك السجل الفعال.resource_controller
: يعرّف المولّد الذي سيُستخدم لتوليد المتحكم عند استخدامrails generate resource
ويساوي :controller
بشكل افتراضي.resource_route
: يعرّف ما إذا كان يجب توليد تعريف مسار المورد (resource) أو لا، وهوtrue
بشكل افتراضي.scaffold_controller
: يختلف عنresource_controller
، إذ يحدّد أي من المولدات سيُستخدم لتوليد متحكم ذي سقالة (scaffolded controller) عند استخدامrails generate scaffold
وهو :scaffold_controller
بشكل افتراضي.stylesheets
: يشغّل الخطاف (hook) لأوراق الأنماط (stylesheets) في المولدات، ويُستخدم في ريلز عند عمل المولّدscaffold
، لكن يمكن استخدام هذا الخطاف في مولدات أخرى كذلك، وهوtrue
بشكل افتراضي.stylesheet_engine
: يضبط محرّك أوراق الأنماط (مثل sass) الذي يجب استخدامه عند توليد الأصول، وهو :css
بشكل افتراضي.scaffold_stylesheet
: ينشئ scaffold.css عند توليد مورد دي سقالة، وهوtrue
بشكل افتراضي.test_framework
: يعرّف أي إطار اختبار يجب استخدامه، وهوfalse
وسيستخدم Minitest بشكل افتراضي.template_engine
: يعرّف محرك القوالب المراد استخدامه، مثل ERB أو Haml، وهو :erb
بشكل افتراضي.
ضبط البرمجيات الوسيطة
يأتي كل تطبيق ريلز مع مجموعة قياسيّة من البرامج الوسيطة (middleware) التي تُستخدم في هذا الترتيب في بيئة التطوير:
ActionDispatch::SSL
: يفرض أن يُخدم كل طلب باستخدام HTTPS، وهو مفعّل إذا كانconfig.force_ssl
يساويtrue
، ويمكن ضبط الخيارات الممرّرت إلى هذا عن طريق تعيينconfig.ssl_options
.ActionDispatch::Static
: يُستخدم لخدمة الأصول الثابتة، وهو معطّل إذا كانconfig.public_file_server.enabled
يساويfalse
. عيّنconfig.public_file_server.index_name
إذا أردت تخديم ملف فهرس مجلد ثابت لا يسمىindex
، فعل سبيل المثال، لتخديم main.html بدلًا من index.html لطلبات المجلد. اضبطconfig.public_file_server.index_name
إلى "main".ActionDispatch::Executor
: يسمح بإعادة تحميل شيفرة البرمجية الخاصة بالخيط، وهو معطّل إذا كانconfig.allow_concurrency
يساويfalse
، مما يؤدي إلى تحميلRack::Lock
، ويلف هذا الأخير التطبيق في كائن المزامنة بحيث يمكن الاتصال به فقط بواسطة خيط واحد في كل مرّة.ActiveSupport::Cache::Strategy::LocalCac
يعمل كذاكرة تخزين أساسيّة لدعم ذاكرة التخزين المؤقت، وهذه الذاكرة ليست خيطًا آمنًا، وتعمل كذاكرة تخزين مؤقت للخيط الواحدة.Rack::Runtime
: يعيّن الترويسةX-Runtime
التي تحتوي على الوقت (بالثواني) المنقضى لتنفيذ الطلب.Rails::Rack::Logger
: يخطر السجلات بأن الطلب قد بدأ. وبعد اكتمال الطلب، تُمسَح جميع السجلات.ActionDispatch::ShowExceptions
: ينقذ (rescues) أي استثناء يعاد من خلال التطبيق ويعرض صفحات استثناء لطيفة إذا كان الطلب محليًا أو إذا كانconfig.consider_all_requests_local
يساويtrue
. وإذا كان الضبطconfig.action_dispatch.show_exceptions
يساويfalse
، فسترمى الاستثناءات بصرف النظر عن ذلك.ActionDispatch::RequestId
: يجعل الترويسةX-Request-Id
الفريدة متاحة إلى الاستجابة ويفعّل التابعActionDispatch::Request.uuid
.ActionDispatch::RemoteIp
يتحقق من هجمات انتحال IP ويحصل علىclient_ip
صالح من ترويسات الطلبات، وهو قابل للضبط باستخدام الخيارينconfig.action_dispatch.ip_spoofing_check
وconfig.action_dispatch.trusted_proxies
.Rack::Sendfile
: يعالج الاستجابات التي يُخدَّم نصفها من ملف ويستبدله بالترويسةX-Sendfile
الخاصة بالخادم. وهو قابل للضبط باستخدامconfig.action_dispatch.x_sendfile_header
.ActionDispatch::Callbacks
يشغّل ردود النداء (callbacks) للتحضير قبل تخديم الطلب.ActionDispatch::Cookies
: يعيّن ملفات تعريف الإرتباط للطلب.ActionDispatch::Session::CookieStore
: هو المسؤول عن تخزين جلسة العمل في ملفات تعريف الارتباط، ويمكن استخدام وسيط بديل لهذا من خلال تغييرconfig.action_controller.session_store
إلى قيمة بديلة. وبالإضافة إلى ذلك، يمكن تكون الخيارات الممرّرت باستخدامconfig.action_controller.session_options
.ActionDispatch::Flash
: يُعدّ مفاتيح الوصول اللحظي (flash keys)، وهو متاح فقط في حالة تعيينconfig.action_controller.session_store
إلى قيمة.Rack::MethodOverride
يسمح للأسلوب بإعادة كتابته (overridden) إذا عيّنparams[:_method]
، وتدعم هذه الوسيطة أنواع التوابع HTTP و PATCH وPUT و DELETE.Rack::Head
يحوّل طلبات HEAD إلى طلبات GET ويخدّمهم.
إلى جانب هذه البرمجيات الوسيطة المعتادة، يمكنك إضافة البرمجيات الوسيطة الخاصة بك باستخدام التابع config.middleware.use
:
config.middleware.use Magical::Unicorns
سيضع هذا وسيطة Magical::Unicorns
في نهاية المكدّس، يمكنك استخدام insert_before
إذا كنت ترغب في إضافة برامج وسيطة قبل الأخرى.
config.middleware.insert_before Rack::Head, Magical::Unicorns
أو يمكنك إدراج وسيطة في موقع محدد باستخدام الفهارس، فعلى سبيل المثال، إذا كنت تريد إدراج وسيطة Magical::Unicorns
في أعلى المكدّس، فيمكنك القيام بذلك كالتالي:
config.middleware.insert_before 0, Magical::Unicorns
هنالك أيضًا insert_after
والتي تدرج الوسيطة بعد الأخرى:
config.middleware.insert_after Rack::Head, Magical::Unicorns
يمكن أيضًا تبديل الوسائط واستبدالها:
config.middleware.swap ActionController::Failsafe, Lifo::Failsafe
يمكنك أيضًا إزالتها من المكدس تمامًا:
config.middleware.delete Rack::MethodOverride
ضبط الواجهة البرمجية لتدويل ريلز (i18n)
يتم تفويض جميع خيارات الضبط إلى المكتبة I18n
.
config.i18n.available_locales
: تعرض القوائم البيضاء للمحليات (locale) المتوفّرة للتطبيق. وهي بشكل افتراضي لجميع مفاتيح المحليّة الموجودة في الملفات المحليّة، وهي في لاعادة :en
في التطبيق الجديد.config.i18n.default_locale
: تعيّن المحلي الافتراضي للتطبيق المستخدم فيI18n
، وهي بشكل افتراضي تساوي :en
.config.i18n.enforce_available_locales
: يضمن أن جميع المحليات التي مرّت عبرI18n
قد أُعلن عنها في قائمةavailable_locales
، وسيرمي استثناءI18n::InvalidLocale
عند إعداد محلي غير متوفّر، وهي بشكل افتراضيtrue
، ومن المستحسن عدم تعطيل هذا الخيار ما لم يكن مطلوبًا بشدّة، حيث يعمل هذا كمقياس أمان ضد تعيين أي محلي غير صالح من المدخلات المستخدم.config.i18n.load_path
: يعيّن المسار الذي يستخدمه ريلز للبحث عن الملفات المحليّة، وهي بشكل افتراضي تساويconfig/locales/*.{yml,rb}
.config.i18n.fallbacks
: يعيّن السلوك الاحتياطي للترجمات المفقودة، وهذه 3 أمثلة استخدام لهذا الخيار:
- يمكنك تعيين الخيار على
true
لاستخدام المحلي الافتراضي:
- يمكنك تعيين الخيار على
config.i18n.fallbacks = true
- أو يمكنك تعيين مجموعة من المحليات، كالتالي:
config.i18n.fallbacks = [:tr, :en]
- أو يمكنك تعيين محليات اللجوء بشكل فردي، فعلى سبيل المثال، إذا أردت استخدام
:tr
لـ :az
و :de
، و :en
لـ :da
كلجوء، فيمكنك فعل ذلك على طريق:
- أو يمكنك تعيين محليات اللجوء بشكل فردي، فعلى سبيل المثال، إذا أردت استخدام
config.i18n.fallbacks = { az: :tr, da: [:de, :en] }
# أو
config.i18n.fallbacks.map = { az: :tr, da: [:de, :en] }
ضبط السجل الفعال
يتضمّن config.active_record
مجموعة متنوّعة من خيارات الضبط:
config.active_record.logger
: يقبل مسجلًا يتطابق مع الواجهةLog4r
أو الصنفLogger
الافتراضي الذي يخص روبي، والذي يمرر بعد ذلك إلى أي اتصالات قاعدة بيانات جديدة تم إنشاؤها. يمكنك استرداد هذا السجل من خلال استدعاءlogger
إما في صنف نموذج السجل الفعال أو في نسخة نموذج السجل الفعال. ويمكنك تعيينه إلى القيمةnil
لتعطيل التسجيل.config.active_record.primary_key_prefix_type
: يتيح لك ضبط تسمية أعمدة المفاتيح الأساسيّة، افتراضيًا، يفترض ريلز أن أعمدة المفاتيح الأساسيّة تسمىid
(وليس هنالك حاجة لتعيين هذا الخيار)، ويوجد خيارات آخران::table_name
: سيجعل المفتاح الرئيسي للصنفCustomer
هوcustomerid
.-
:table_name_with_underscore
: سيجعل المفتاح الأساسي للصنفCustomer
هوcustomer_id
.
config.active_record.table_name_prefix
: يتيح لك تعيين سلسلة عامة (global) لارفاقها بأسماء الجداول. إذا قمت تعيين هذا الضبط إلىnorthwest_
، فإن الصنفCustomer
سيبحث عنnorthwest_customers
كجدول له. وبشكل افتراضي يساوي سلسلة نصيّة فارغة.config.active_record.table_name_suffix
: يتيح لك تعيين سلسلة عامة (global) لإلحاقها بأسماء الجداول،. إذا قمت تعيين هذا الضبط إلى_northwest
فإن الصنفCustomer
سيبحث عنcustomers_northwest
كجدول له. وبشكل افتراضي يساوي سلسلة نصيّة فارغة.config.active_record.schema_migrations_table_name
: يتيح لك تعيين سلسلة نصيّة لاستخدامها كاسم جدول تهجيرات المخطط (schema migrations table).config.active_record.internal_metadata_table_name
: يتيح لك تعيين سلسلة نصيّة لاستخدامها كاسم جدول البيانات الأوليّة الداخلية.config.active_record.protected_environments
: يتيح لك تعيين مصفوفة من أسماء البيئات التي ينبعي فيها حظر الإجراءات المدمرة (destructive actions).config.active_record.pluralize_table_names
: يحدد ما إذا كان ريلز سيبحث عن أسماء الجداول المفردة أو الجمع في قاعدة البيانات. إذا تم تعيينه علىtrue
(الافتراضي)، فسيستخدم الصنفCustomer
الجدولcustomers
وإذا كانتfalse
، فسيستخدم الصنفCustomer
الجدولcustomer
.config.active_record.default_timezone
: يحدد ما إذا كان سيُستخدمTime.local
(إذا عيّن إلى القيمة:local
) أوTime.utc
(إذا عيّن إلى القيمة:utc
) عند سحب التواريخ والأوقات من قاعدة البيانات. القيمة الافتراضية لهذا الخيار هي:utc
.config.active_record.schema_format
: يتحكم في التنسيق من أجل تفريغ مخطط قاعدة البيانات إلى ملف. والخيارات هي:ruby
(الافتراضي) لإصدار مستقل لقاعدة البيانات يعتمد على عمليات التهجير، أو:sql
لمجموعة من تعليمات SQL (التي يمكن أن تعتمد على قاعدة البيانات).config.active_record.error_on_ignored_order
: يحدد ما إذا كان ينبغي رفع الخطأ إذا تم تجاهل ترتيب الاستعلام أثناء استعلام مجموعة واحدة. الخيارات هيtrue
(رفع خطأ) أوfalse
(تحذير)، وبشكل افتراضي تساويfalse
.config.active_record.timestamped_migrations
: تتحكم ما إذا كان يتم ترقيم عمليات التهجير باستخدام أرقام مسلسلة أو مع طوابع زمنيّة (timestamps). بشكل افتراضي تساويtrue
لاستخدام الطوابع الزمنية، والتي يفضل استخدامها إذا كان هنالك العديد من المطورين الذي يعملون على نفس التطبيق.config.active_record.lock_optimistically
: يتحكم ما إذا كان السجل الفعال سيستخدم القفل المستبشر (optimistic locking) أم لا. وهوtrue
بشكل افتراضي.config.active_record.cache_timestamp_format
: يتحكم في تنسيق قيمة البصمة الزمنية (timestamp) في مفتاح ذاكرة التخزين المؤقت. وبشكل افتراضي يساوي:nsec
.config.active_record.record_timestamps
: هو قيمة منطقيّة تتحكّم في ما إذا كان هنالك طابع زمني على عمليات الإنشاء والتحديث في نموذج. وهو بشكل افتراضيtrue
.config.active_record.partial_writes
: هو قيمة منطقيّة وتتحكّم ما إذا كانت تُستخدم عمليات الكتابة الجزئية أم لا (بمعنى ما إذا كانت التحديثات تعيّن الخاصيات المتسخة [dirty]). لاحظ أنه عند استخدام عمليات الكتابة الجزئية، يجب عليك استخدام القفل المستبشرconfig.active_record.lock_optimistically
نظرًا لأن التحديثات المتزامنة قد تكتب الخاصيات استنادًا إلى حالة قراءة تالفة. بشكل افتراضي يساويtrue
.config.active_record.maintain_test_schema
: هي قيمة منطقيّة تتحكم في ما إذا كان السجل الفعال يجب أن يحاول تحديث مخطط قاعدة بيانات الاختبار (test database schema) مع db/schema.rb (أو db/structure.sql) عند تشغيل الاختبارات. بشكل افتراضي يساويtrue
.config.active_record.dump_schema_after_migration
: هو راية تتحكّم في ما إذا كان يجب أن يحدث تفريغ المخطّط (db/schema.rb أو db/structure.sql) عند تشغيل عمليات التهجير. ويعيّن هذه الراية إلى القيمةfalse
في config/environments/production.rb المنشئ بواسطة ريلز. والقيمة الافتراضيّة هي true إذا لم يعيّن هذا الضبط.config.active_record.dump_schemas
: يتحكّم في ما هي مخططات قاعدة البيانات التي ستفرّغ عند استدعاءdb:structure:dump
. الخيارات هي::schema_search_path
(وهو الافتراضي) والذي يفرّغ أي مخططات مدرجة فيschema_search_path
،:all
الذي يفرّغ دائمًا جميع المخططات بغض النظر عنschema_search_path
أو سلسلة نصيّة من المخططات المفصولة بفواصل.config.active_record.belongs_to_required_by_default
: هي قيمة منطقيّة تتحكّم في ما إذا كان السجل يفشل في التحقق (validation) إذا لم يكن هنالك ارتباط من النوع belongs_to (ارتباط انتماء).config.active_record.warn_on_records_fetched_greater_than
: يتيح تعيين حدًّا للتحذير من أجل حجم نتيجة الاستعلام. إذا تجاوز عدد السجلات التي تم إرجاعها بواسطة استعلام الحد المسموح، فسيُسجّل تحذير. ويمكن استخدام هذا الضبط لتحديد الاستعلامات التي تتسبب في حدوث تضخم في الذاكرة.config.active_record.index_nested_attribute_errors
: يسمح للأخطاء في الارتباطات has_many المتداخلة أن تُعرض مع فهرس بالإضافة إلى الخطأ. بشكل افتراضي يساويfalse
.config.active_record.use_schema_cache_dump
: يتيح للمستخدمين الحصول على معلومات التخزين المؤقت للمخطط من db/schema_cache.yml (المنشئ بواسطةbin/rails db:schema:cache:dump
) بدلًا من الاضطرار إلى إرسال استعلام إلى قاعدة البيانات للحصول على هذه المعلومات. بشكل افتراضي يساويtrue
.
يضيف محوّل MySQL خيار ضبط إضافي آخر:
ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans
: يتحكّم ما إذا السجل الفعال سيَعُدُّ جميع الأعمدةtinyint(1)
كقيم منطقيّة. بشكل افتراضي يساويtrue
.
يضيف محوّل SQLite3Adapter خيار ضبط إضافي آخر:
ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer
: يشير ما إذا ما إذا كانت القيم المنطقية المخزنة في قواعد بيانات sqlite3 ستُمثَّل بالشكل 1 و 0 أو 't' و 'f'. ترك الضبطActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer
معيَّنًا للقيمةfalse
قد أُهمِل. لقد استخدمت قواعد بيانات SQLite التمثيل 't' و 'f' لسلسلة القيم المنطقيّة ويجب أن تحتوي على البيانات القديمة بعد تحويلها إلى 1 و0 (التسلسل المنطقي الأصلي) وقبل تعيين هذه الراية إلىtrue
. ويمكن التحويل عن طريق إعداد مهمة Rake التي تشغّل:
ExampleModel.where("boolean_column = 't'").update_all(boolean_column: 1)
ExampleModel.where("boolean_column = 'f'").update_all(boolean_column: 0)
لجميع النماذج وجميع الأعمدة المنطقيّة، يجب بعدها تعيين هذه الراية إلى القيمة true
بإضافة ما يلي إلى الملف application.rb:
```ruby
Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = true
```
يضيف مفرّغ المخطط (schema dumper) خيار ضبط إضافي آخر:
ActiveRecord::SchemaDumper.ignore_tables
: يقبل مصفوفة من الجداول التي لا يجب تضمينها في أي ملف مخطط تم إنشاؤه.
ضبط إجراء التحكم (Action Controller)
يتضمّن config.action_controller
عددًا من إعدادات الضبط هي:
config.action_controller.asset_host
: يعيّن المضيف للأصول، وهو مفيد عند استخدام CDN لاستضافة الأصول بدلًا من خادم التطبيق نفسه.config.action_controller.perform_caching
: يضبط ما إذا كان يجب أن ينفذ التطبيق ميزات التخزين المؤقت التي يوفرها مكون متحكم الإجراء أو لا. وقيمتهfalse
في وضع التطوير وtrue
في وضع الإنتاج.config.action_controller.default_static_extension
: يضبط اللاحقة المستخدمة في صفحات التخزين المؤقت. وهي بشكل افتراضي .html
.config.action_controller.include_all_helpers
: يضبط ما إذا كان جميع مساعدي العروض متوفرين في كل مكان أو تحديد نطاقها إلى المتحكم المقابل. في حالة تعيين هذا الضبط إلى القيمةfalse
، فستكون توابعUsersHelper
متوفّرة فقط لعروض المصيَّرة كجزء من المتحكمUsersController
. وإذا كانtrue
، فإن توابعUsersHelper
ستكون متوفّرة في كل مكان، وإن سلوك الضبط الافتراضي (عندما لا يعيّن هذا الخيار بشكل صريح كـtrue
أوfalse
) هو أن كافة مساعدي العروض متوفّرة لكل متحكّم.config.action_controller.logger
: يقبل مسجلًا مطابقًا للواجهةLog4r
أو صنف روبيLogger
الافتراضي، والذي يُستخدم بعد ذلك لتسجيل المعلومات من متحكم الإجراء. اضبطه إلىnil
لتعطيل التسجيل.config.action_controller.request_forgery_protection_token
: يعيّن اسم معامل الرمز (token parameter name) من أجلRequestForgery
. وإن استدعاءprotect_from_forgery
يعيّن هذا الضبط إلى:authenticity_token
بشكل افتراضي.config.action_controller.allow_forgery_protection
: يفعّل أو يعطّل حماية CSRF. وهو بشكل افتراضيfalse
في وضع الاختبار وtrue
في جميع الأوضاع الأخرى.config.action_controller.forgery_protection_origin_check
: يضبط ما إذا كان يجب التحقق من الترويسةOrigin
في طلبيات HTTP ضد أصل الموقع (site's origin) كدفاع إضافي من هجمات CSRF.config.action_controller.per_form_csrf_tokens
: يضبط ما إذا كانت رموز CSRF صالحة فقط للتابع/الإجراء الذي تم إنشاؤه له.config.action_controller.default_protect_from_forgery
: يحدد إضافة حماية التزوير علىActionController:Base
، وهوfalse
بشكل افتراضي، ولكنه مفعّل عند تحميل الإعدادات الافتراضيّة للإصدار 5.2 من ريلز.config.action_controller.relative_url_root
: يمكن استخدامه لإخبار ريلز أنك تنشر تطبيقك إلى مجلد فرعي. بشكل افتراضي يساويENV['RAILS_RELATIVE_URL_ROOT']
.config.action_controller.permit_all_parameters
: يعيّن السماح لجميع المعاملات بالتعيين الشامل بشكل افتراضي. القيمة الافتراضية هيfalse
.config.action_controller.action_on_unpermitted_parameters
: يفعّل التسجيل أو رفع استثناء إذا تم العثور على معاملات غير مسموح بها بشكل صريح. استعمل:log
أو:raise
لكل حالة على التوالي. القيمة الافتراضيّة هي:log
في أوضاع التطوير والاختبار، وfalse
في جميع الأوضاع الأخرى.config.action_controller.always_permitted_parameters
: تعيّن قائمة بالمعاملات المسموح بها بشكل افتراضي. القيم الافتراضيّة هي['controller', 'action']
config.action_controller.enable_fragment_cache_logging
: يحدد ما إذا كان سيتم تسجيل أجزاء القراءة والكتابة لذاكرة التخزين المؤقت بشكل مفصل كالتالي:
Read fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/d0bdf2974e1ef6d31685c3b392ad0b74 (0.6ms)
Rendered messages/_message.html.erb in 1.2 ms [cache hit]
Write fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/3b4e249ac9d168c617e32e84b99218b5 (1.1ms)
Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss]
افتراضيًا، يتم تعيينه إلى القيمة false
مما ينتج عنه المخرجات التالية:
```
Rendered messages/_message.html.erb in 1.2 ms [cache hit]
Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss]
```
ضبط إجراء الإرسال (Action Dispatch)
config.action_dispatch.session_store
: يعيّن اسم المخزن المراد تخزين بيانات الجلسة فيه. وهو بشكل افتراضي:cookie_store
وتتضمن الخيارات الصالحة الأخرى:active_record_store
أو:mem_cache_store
أو اسم الصنف المخصص الخاص بك.config.action_dispatch.default_headers
: هو جدول Hash مع ترويسات HTTP التي تم تعيينها بشكل افتراضي في كل استجابة. بشكل افتراضي، معرّفة على أنها:
config.action_dispatch.default_headers = {
'X-Frame-Options' => 'SAMEORIGIN',
'X-XSS-Protection' => '1; mode=block',
'X-Content-Type-Options' => 'nosniff',
'X-Download-Options' => 'noopen',
'X-Permitted-Cross-Domain-Policies' => 'none',
'Referrer-Policy' => 'strict-origin-when-cross-origin'
}
config.action_dispatch.default_charset
: يحدد مجموعة المحارف الافتراضيّة لكافة عمليات التصيير. يساويnil
بشكل افتراضي.config.action_dispatch.tld_length
: يعيّن طول TLD (نطاق المستوى الأعلى [top-level domain]) للتطبيق، وهو 1 بشكل افتراضي.config.action_dispatch.ignore_accept_header
: يُستخدم لتحديد ما إذا كان ستتجاهل قبول ترويسات من الطلب، وهو بشكل افتراضيfalse
.config.action_dispatch.x_sendfile_header
: يحدد الترويسةX-Sendfile
المخصصة لخادم معين. وهو مفيد لتسريع إرسال الملفات من الخادم، على سبيل المثال، يمكن تعيينه إلى القيمة 'X-Sendfile' لخادم أباتشي.config.action_dispatch.http_auth_salt
: يحدد القيمة الزائدة (salt value) لمصادقة طلبيات HTTP. وهي بشكل افتراضي 'http authentication'.config.action_dispatch.signed_cookie_salt
: يعيّن القيمة الزائدة (salt value) لملفات تعريف الارتباط الموقعة، وهو يساوي بشكل افتراضي 'signed cookie'.config.action_dispatch.encrypted_cookie_salt
: يعيّن القيمة الزائدة (salt value) لملفات تعريف الارتباط المشفّرة. وهو يساوي بشكل افتراضي 'encrypted cookie'.config.action_dispatch.encrypted_signed_cookie_salt
: يعيّن القيمة الزائدة (salt value) لملفات تعريف الارتباط الموقعة والمشفّرة. وهو يساوي بشكل افتراضي 'signed encrypted cookie'.config.action_dispatch.authenticated_encrypted_cookie_salt
: يعيّن القيمة الزائدة لملفات تعريف الارتباط المصادق عليها والمشفّرة. وهو يساوي بشكل افتراضي 'authenticated encrypted cookie'.config.action_dispatch.encrypted_cookie_cipher
: يعيّن التشفير المراد استخدامه في ملفات تعريف الارتباط المشفّرة. وهو بشكل افتراضي "aes-256-gcm".config.action_dispatch.signed_cookie_digest
: يعيّن خوارزمية التشفير للقيم المختصرة المشفرة (digest) المراد استخدامها في ملفات تعريف الارتباط الموقعة. وهو "SHA1" بشكل افتراضي.config.action_dispatch.cookies_rotations
: يسمح بتدوير الأسرار، والتشفيرات، والقيم المشفرة المختصرة لملفات تعريف الارتباط المشفّرة والموقعة.config.action_dispatch.use_authenticated_cookie_encryption
: يتحكّم ما إذا كانت ملفات تعريف الارتباط المشفّرة والموقعة تستخدم التشفير AES-256-GCM أو التشفير AES-256-CBC القديم. وهوtrue
بشكل افتراضي.config.action_dispatch.perform_deep_munge
: يضبط ما إذا كان يجب تنفيذ التابعdeep_munge
على المعاملات. انظر دليل الأمن لمزيد من المعلومات. القيمة الافتراضية لهذا الضبط هيtrue
.config.action_dispatch.rescue_responses
: يضبط الاستثناءات التي عيّنت لحالة HTTP، وهي تقبل جدول hash ويمكنك تحديد أزواج من استثناء/حالة. وهو بشكل افتراضي معرّف على أنه:
config.action_dispatch.rescue_responses = {
'ActionController::RoutingError' => :not_found,
'AbstractController::ActionNotFound' => :not_found,
'ActionController::MethodNotAllowed' => :method_not_allowed,
'ActionController::UnknownHttpMethod' => :method_not_allowed,
'ActionController::NotImplemented' => :not_implemented,
'ActionController::UnknownFormat' => :not_acceptable,
'ActionController::InvalidAuthenticityToken' => :unprocessable_entity,
'ActionController::InvalidCrossOriginRequest' => :unprocessable_entity,
'ActionDispatch::Http::Parameters::ParseError' => :bad_request,
'ActionController::BadRequest' => :bad_request,
'ActionController::ParameterMissing' => :bad_request,
'Rack::QueryParser::ParameterTypeError' => :bad_request,
'Rack::QueryParser::InvalidParameterError' => :bad_request,
'ActiveRecord::RecordNotFound' => :not_found,
'ActiveRecord::StaleObjectError' => :conflict,
'ActiveRecord::RecordInvalid' => :unprocessable_entity,
'ActiveRecord::RecordNotSaved' => :unprocessable_entity
}
سيُعيّن أي استثناء لم يُضبَط إلى الخطأ 500 الداخلي في الخادم (Internal Server Error).
ActionDispatch::Callbacks.before
: تأخذ كتلة من التعليمات البرمجيّة لتشغيلها قبل الطلب.ActionDispatch::Callbacks.after
: تأخذ كتلة من التعليمات البرمجيّة لتشغيلها بعد الطلب.
ضبط إجراء العرض
يتضمن config.action_view
مجموعة صغيرة من إعدادات الضبط:
config.action_view.cache_template_loading
: يتحكّم في ما إذا كان يجب إعادة تحميل القوالب في كل طلب أو لا. القيمة الافتراضية لهذا الضبط هي نفس القيمة التي ضُبَط فيconfig.cache_classes
.
config.action_view.field_error_proc
: يوفّر مولّد HTML لعرض الأخطاء التي تأتي من نموذج فعال (Active Model)، وهو بشكل افتراضي:
Proc.new do |html_tag, instance|
%Q(<div class="field_with_errors">#{html_tag}</div>).html_safe
end
config.action_view.default_form_builder
: يخبر ريلز أي باني نموذج يراد استخدامه بشكل افتراضي. القيمة الافتراضية له هيActionView::Helpers::FormBuilder
. إذا أردت تحميل صنف باني النموذج بعد التهيئة (لكي يعاد تحميله على كل طلب قيّد التطوير)، يمكنك تمريره كسلسة نصيّة.config.action_view.logger
: يقبل مسجل يتطابق مع الواجهةLog4r
أو صنف روبيLogger
الافتراضي، والذي يُستخدَم بعد ذلك لتسجيل المعلومات من إجراء العرض. اضبطه إلى القيمةnil
لتعطيل التسجيل.config.action_view.erb_trim_mode
: يسمح باستخدام الوضع trim من قبل ERB. وهو بشكل افتراضي "-"، والذي يعمل على تشذيب مسافات التذييل والسطر الجديد عند استخدام<%= -%>
أو<%= =%>
. راجع توثيق Erubis لمزيد من المعلومات.config.action_view.embed_authenticity_token_in_remote_forms
: يسمح لك بتعيين السلوك الافتراضي لـauthenticity_token
في النماذج معremote:true
. وهوfalse
بشكل افتراضي، مما يعني أن النماذج البعيدة لن تتضمنauthenticity_token
وهو أمر مفيد عندما تخزّن أجزاء النموذج بشكل مؤقت في الذاكرة. تحصل النماذج البعيدة على المصادقة من الوسم<meta>
، لذلك لا يكون الدمج ضروريًا إلا إذا رغبت بدعم المتصفحات بدون JavaScript. وفي مثل هذه الحالة، يمكنك تمريرauthenticity_token: true
كخيار النموذج أو تعيين خيار الضبط هذا إلى القيمةtrue
.config.action_view.prefix_partial_path_with_controller_namespace
: يحدَّد ما إذا كان يتم البحث عن أجزاء من مجلد فرعي أم لا في القوالب المصيَّرة من متحكمات مجالات الأسماء. فعلى سبيل المثال، افترض وجود متحكم يسمىAdmin::ArticlesController
الذي يصيِّر هذا القالب:
<%= render @article %>
الإعداد الافتراضي هو true
، والذي يستخدم الجزئية الموجودة في /admin/articles/_article.erb، وعند تعيين القيمة إلى false
فسيُصيَّر /articles/_article.erb والذي هو نفس السلوك التصيير من متحكم ليس من مجال الاسم مثل ArticlesController
.
config.action_view.raise_on_missing_translations
: يحدد ما إذا كان يجب رفع خطأ للتحويلات المفقودة.config.action_view.automatically_disable_submit_tag
: يحدد ما إذا كان يجب تعطيلsubmit_tag
(وسم الإرسال) عند النقر. وهو بشكل افتراضيtrue
.config.action_view.debug_missing_translation
: يحدد ما إذا كان سيغلف مفتاح التحويلات المفقودة في الوسم<span>
أو لا، وهوtrue
بشكل افتراضي.config.action_view.form_with_generates_remote_forms
: يحدد ما إذا كانform_with
يولّد نماذج عن بعد أم لا، وهوtrue
بشكل افتراضي.config.action_view.form_with_generates_ids
: يحدد ما إذا كانform_with
يولد معرفات على المدخلات، وهوtrue
بشكل افتراضي.
ضبط إجراء المراسلة
هنالك عدد من الإعدادات المتاحة في الضبط config.action_mailer
:
- config.action_mailer.logger يقبل مسجلًا مطابقًا لواجهة Log4r أو صنف Ruby Logger الافتراضي، والذي يُستخدم بعد ذلك لتسجيل المعلومات من Mailer الإجراء. اضبطه على nil لتعطيل التسجيل.
- config.action_mailer.smtp_settings يتيح ضبط تفصيلي لتابع :smtp للتسليم، وهو يقبل hash من الخيارات، والتي يمكن أن تشمل أي من هذه الخيارات:
- :address - تسمح لك باستخدام خادم بريد بعيد، كل ما عليك فعله هو تغيير إعداد "localhost" الافتراضي.
- :port - في حالة عدم عمل خادم البريد الخاص على المنفذ 25، يمكنك تغييره.
- :domain - إذا أردت تحديد نطاق HELO، فيمكنك القيام بذلك هنا.
- :user_name - إذا كان خادم البريد الخاص بك يتطلّب الاستيثاق، فعيّن اسم المستخدم في هذا الإعداد.
- :password - إذا كان خادم البريد الخاص بك يتطلّب المصادقة، فعيّن كلمة المرور في هذا الإعداد.
- :authentication - إذا كان خادم البريد الخاص بك يتطلّب المصادقة، فعليك تحديد نوع المصادقة هنا، وهو رمز وهو واحد من :plain، :login، :cram_md5.
- :enable_starttls_auto - يكتشف ما إذا تم تمكين STARTTLS في خادم SMTP الخاص بك ويبدأ في استخدامه، وهو true بشكل افتراضي.
- :openssl_verify_mode - عند استخدام TLS، يمكنك ضبط كيفية قيام OpenSSL بالتحقق من الشهادة، وهذا مفيد إذا أردت التحقق من صحة شهادة self-signed أو/و wildcard. يمكن أن يكون هذا أحد ثوابت التحقق من OpenSSL وهي :none أو :peer -- أو الثابت مباشرةً OpenSSL::SSL::VERIFY_NONE أو OpenSSL::SSL::VERIFY_PEER على التوالي.
- :ssl/:tls - لتمكين اتصال SMTP ليستخدم SMTP/TLS (SMTPS: SMTP عبر اتصال TLS مباشر).
- config.action_mailer.sendmail_settings يسمح ضبط مفصّل لتابع تسليم sendmail، وهي تقبل Hash من الخيارات، والتي يمكن أن تشكل أي من هذه الخيارات:
- :location - موقع sendmail التنفيذي، وهو بشكل افتراضي /usr/sbin/sendmail.
- :arguments - معاملات سطر الأوامر، بشكل افتراضي يساوي -i.
- config.action_mailer.raise_delivery_errors يحدد ما إذا كان سيُرفع خطأ في تعذّر إكمال تسليم البريد الإلكتروني، وهو true بشكل افتراضي.
- config.action_mailer.delivery_method يحدد تابع التسليم وهو :smtp بشكل افتراضي. راجع قسم الضبط في دليل Action Mailer للمزيد من المعلومات.
- config.action_mailer.perform_deliveries يحدد إذا كان البريد سيُسلّم بالفعل وهو true بشكل افتراضي، ومن المستحسن تعيينه على false للاختبار.
- config.action_mailer.default_options يكوّن الإعدادات الافتراضيّة لـ Mailer الإجراء بشكل افتراضي، ويُستخدم لتعيين الخيارات مثل from أو reply_to لكل mailer، وهو افتراضي لـ:
mime_version: "1.0",
charset: "UTF-8",
content_type: "text/plain",
parts_order: ["text/plain", "text/enriched", "text/html"]
- عيّن hash لتعيين خيارات إضافيّة:
config.action_mailer.default_options = {
from: "noreply@example.com"
}
config.action_mailer.observers
: مراقبي السجل الذين سيتم إبلاغهم عند تسليم البريد.
config.action_mailer.observers = ["MailObserver"]
config.action_mailer.interceptors
: معترضات السجل والتي سيتم استدعاؤهم قبل ارسال البريد.
config.action_mailer.interceptors = ["MailInterceptor"]
config.action_mailer.preview_path
: يحدد موقع معاينات البريد الالكتروني.
config.action_mailer.preview_path = "#{Rails.root}/lib/mailer_previews"
config.action_mailer.show_previews
: يفعّل أو يعطّل معاينات البريد، وهو true بشكل افتراضي في وضع التطوير.
config.action_mailer.show_previews = false
config.action_mailer.deliver_later_queue_name
: يحدد اسم الطابور (queue) للمرسلين، وهو بشكل افتراضي mailers.config.action_mailer.perform_caching
: يحدد ما إذا كان يجب أن تقوم قوالب الإرسال بإجراء تخزين مؤقت للأجزاء أو لا، وهو false بشكل افتراضي في جميع البيئات.
إعداد دعم النشط
هنالك عدة خيارات ضبط متاحة في Active Support:
- Config.active_support.bare يفعّل أو يعطّل تحميل active_support/all عند تشغيل Rails، وهو nil بشكل افتراضي، مما يعني تحميل active_support/all.
- Config.active_support.test_order يعيّن الترتيب الذي من خلاله تنفّذ حالات الاختبار. القيم المحتملة هي :random و:sorted. وبشكل افتراضي :random.
- Config.active_support.escape_html_entities_in_json يفعّل أو يعطّل تهريب كيانات HTML في سَلسَلة JSON، وهو true بشكل افتراضي.
- Config.active_support.use_standard_json_time_format يفعّل أو يعطّل سلسلة التواريخ إلى تنسيق ISO 8601، وهو true افتراضيًا.
- Config.active_support.time_precision يعيّن دقة قيمة الوقت التي تم ترميزها. وهو 3 افتراضيًا.
- Config.active_support.use_sha1_digests يحدد ما إذا كنت ستستخدم SHA-1 بدلًا من MD5 لتوليد digests غير حساسة، مثل رأس ETag، وهي false افتراضيًا.
- Config.active_support.use_authenticated_message_encryption تحدد ما إذا كان سيُستخدم تشفير المصادق AES-256-GCM كتشفير افتراضي لتشفير الرسائل بدلًا من AES-256-CBC. هو false افتراضيًا لكنه يكون true عند تحميل الإعداد الافتراضيّة لـ Rails 5.2.
- ActiveSupport::Logger.silencer يعيّن false لتعطيل القدرة على إسكات التسجيل في كتلة، وهو true افتراضيًا.
- ActiveSupport::Cache::Store.logger يحدد المسجل لاستخدامه داخل عمليات التخزين في ذاكرة التخزين المؤقتة.
- ActiveSupport::Deprecation.behavior أداة ضبط بديلة لـ config.active_support.deprecation الذي يكوّن سلوك تحذيرات الإهمال في Rails.
- ActiveSupport::Deprecation.silence يأخذ كتلةيتم فيها إسكات كافة تحذيرات الإهمال.
- ActiveSupport::Deprecation.silenced يعيّن ما إذا كان ستعرض تحذيرات الإهمال أو لا.
ضبط وظيفة نشطة
يوفّر config.active_job خيارات الضبط التاليّة:
- Config.active_job.queue_adapter يعيّن المحولّل لواجهة الطابور. إن المحوّل الافتراضي هو :async. للحصول على قائمة محدّثة من المحولات المضمنة، راجع وثائق واجهة برمجة التطبيقات لـ ActiveJob::QueueAdapters.
# Be sure to have the adapter's gem in your Gemfile
# and follow the adapter's specific installation
# and deployment instructions.
config.active_job.queue_adapter = :sidekiq
- Config.active_job.default_queue_name يمكن استخدامه لتغيير اسم قائمة الطابور الافتراضيّة والذي هو "default" افتراضيًا.
config.active_job.default_queue_name = :medium_priority
- Config.active_job.queue_name_prefix يسمح لك بتعيين بادئة اسم اختياريّة للطابور غير فارغة لجميع الوظائف. فارغة وغير مستعملة بشكل افتراضي.
يعمل الضبط التالي على ترتيب وظيفة محددة في طابور production_high_priority عند تشغيله في الإنتاج:
config.active_job.queue_name_prefix = Rails.env
class GuestsCleanupJob < ActiveJob::Base
queue_as :high_priority
#....
end
- Config.active_job.queue_name_delimiter يملك قيمة افتراضيّة '_'. إذا عيّنت queue_name_prefix، فإن queue_name_delimiter سيرتبط باسم الطابور الذي يملك بادئة والذي لا يملكها.
سيضع الضبط التالي الوظيفة المعروضة في طابور video_server.low_priority:
# prefix must be set for delimiter to be used
config.active_job.queue_name_prefix = 'video_server'
config.active_job.queue_name_delimiter = '.'
class EncoderJob < ActiveJob::Base
queue_as :low_priority
#....
End
- Config.active_job.logger يقبل مسجلًا مطابقًا لواجهة Log4r أو صنف Ruby Logger الافتراضي، والذي سيُستخدم بعد ذلك لتسجيل المعلومات من الوظيفة النشطة. يمكنك استرداد هذا السجل عن طريق استدعاء logger على أي صنف Active Job أو مثيل Active Job. اضبطه على nil لتعطيل التسجيل.
ضبط كابل الإجراء
- Config.action_cable.url يقبل سلسلة نصيّة لـ URL الخاص بالمكان الذي تستضيف فيه خادم Action Cable. يمكنك استخدام هذا الخيار إذا كنت تشغّل خوادم Action Cable المنفصلة عن التطبيق الرئيسي.
- Config.action_cable.mount_path يقبل سلسلة نصيّة لمكان وصل Action Cable، كجزء من عملية الخادم الرئيسيّة. وهو يساوي بشكل افتراضي /cable ويمكنك تعيينه كـ nil حتى لا يوصل Action Cable كجزء من خادم Rails العادي.
ضبط التخزين النشط
يوفّر config.active_storage خيارات الضبط التالية:
- Config.active_storage.analyzers يقبل مصفوفة من الأصناف التي تشير إلى محللات المتاحة لنقط (blob) Active Storage، وهو بشكل افتراضي يساوي [ActiveStorage::Analyzer::ImageAnalyzer, ActiveStorage::Analyzer::VideoAnalyzer]. هذا الأول يمكنه استخراج عرض وارتفاع صورة blob، ويمكن للأخير استخلاص العرض والارتفاع والمدة والزاوية ونسبة العرض إلى الإرتفاع لفيديو blob.
- Config.active_storage.previewers يقبل مصفوفة من الأصناف التي تشير إلى معاينات الصور المتوفرة في Active Storage blobs. وهو بشكل افتراضي [ActiveStorage::Previewer::PDFPreviewer, ActiveStorage::Previewer::VideoPreviewer]. يمكن للأول أن يولّد صورة مصغّرة من الصفحة الأولى من PDF blob وأما الأخير فمن الإطار المناسب لفيديو blob.
- Config.active_storage.paths يقبل hash من الخيارات التي تشير إلى مواقع أوامر previewer/analyzer. وهو يساوي بشكل افتراضي إلى {}، مما يعني أنه سيبحث عن الاوامر في المسار الافتراضي، ويمكن أن يتضمّن أيًا من هذه الخيارات:
- :ffprobe - موقع ملف ffprobe التنفيذي.
- :mutool - موقع ملف mutool التنفيذي.
- :ffmpeg - موقع ملف ffmpeg التنفيذي.
config.active_storage.paths[:ffprobe] = '/usr/local/bin/ffprobe'
- Config.active_storage.variable_content_types يقبل مصفوفة من السلاسل النصيّة التي تشير إلى أنواع المحتوى التي يمكن لـ Active Storage تحويلها من خلال ImageMagick. وهو بشكل افتراضي يساوي %w(image/png image/gif image/jpg image/jpeg image/vnd.adobe.photoshop image/vnd.microsoft.icon).
- Config.active_storage.content_types_to_serve_as_binary يقبل مصفوفة من السلاسل النصية التي تشير إلى أنواع المحتوى التي سيخدمها Active Storage دائمًا كمُرفق (attachment)، بدلا من مضمنة (inline)، وهو بشكل افتراضي يساوي %w(text/html text/javascript image/svg+xml application/postscript application/x-shockwave-flash text/xml application/xml application/xhtml+xml).
- Config.active_storage.queue يمكن أن يُستخدم لتعيين اسم طابور Active Job المستخدم لأداء مهام مثل تحليل محتوى blob أو تطهير المدوّنة.
config.active_storage.queue = :low_priority
- Config.active_storage.logger يمكن أن يُستخدم لتعيين أداة التسجيل التي يستخدمها Active Storage، وهو يقبل مسجلًا يتطابق مع واجهة Log4r أو مع صنف Ruby Logger الافتراضي.
config.active_storage.logger = ActiveSupport::Logger.new(STDOUT)
ضبط قاعدة البيانات
بما أن كل تطبيق Rails تقريبًا سيتصل بقاعدة بيانات، فيمكنك الاتصال بقاعدة البيانات عن طريق تحديد متغيّر البيئة ENV['DATABASE_URL'] أو باستخدام ملف ضبط يسمى config/database.yml.
ويمكنك باستخدام ملف config/database.yml تحديد جميع المعلومات اللازمة للوصول إلى قاعدة بياناتك:
development:
adapter: postgresql
database: blog_development
pool: 5
سيتصل هذا بقاعدة بيانات تدعى blog_development باستخدام محوّل postgresql، ويمكن تخزين هذه المعلومات نفسها في عنوان URL وتوفيرها عبر متغير البيئة كالتالي:
> puts ENV['DATABASE_URL']
postgresql://localhost/blog_development?pool=5
يحتوي ملف config/database.yml على أقسام لثلاث بيئات مختلفة يمكن تشغيل Rails فيها افتراضيًا:
- تُستخدم بيئة التطوير في الحاسوب المحلي/التطوير أثناء تفاعلك بدويًا مع التطبيق.
- تُستخدم بيئة الاختبار عند تشغيل الاختبارات التلقائيّة.
- تُستخدم بيئة الإنتاج عند نشر التطبيق الخاص بك حتى يستخدمه الجميع.
إذا أردت، فيمكنك تحديد عنوان URL داخل ملف config/database.yml.
development:
url: postgresql://localhost/blog_development?pool=5
يمكن أن يحتوي ملف config/database.yml على وسوم ERB <%= %> وسيقيّم أي شيء داخل هذه الوسوم على أنه شيفرة روبي، ويمكنك استخدام هذا لسحب البيانات من متغيّر بيئة أو لإجراء العمليات الحسابيّة لإنشاء معلومة الاتصال المطلوبة.
تنبيه: لا تحتاج إلى تحديث ضبطات قاعدة البيانات يدويًا، إذا نظرّت إلى خيارات مولّد التطبيق، سترى أن أحد هذه الخيارات يدعى --database، ويسمح لك هذا باختيار محوّل من قائمة قواعد البيانات العلائقيّة الأكثر استخدامًا، ويمكنك حتى تشغيل المولّد بشكل متكرّر: cd .. && rails new blog --database=mysql وعند تأكيد الكتابة فوق ملف config/database.yml سيتكوّن التطبيق لـ MySQL بدلًا من SQLite وستجد في ما يلي أمثلة تفصيليّة لاتصالات قواعد البيانات الشائعة.
تفضيلات الاتصال
نظرًا لوجود طريقتين لضبط الاتصال (باستخدام config/database.yml أو باستخدام متغيّر البيئة) فمن المهم فهم كيفية تفاعلهما.
إذا كان لديك ملف config/database.yml فارغ لكن كان ENV['DATABASE_URL'] موجود، فسيتصل Rails بقاعدة البيانات عبر متغيّر البيئة الخاص بك:
$ cat config/database.yml
$ echo $DATABASE_URL
postgresql://localhost/my_database
إذا كان لديك ملف config/database.yml ولكن ليس ENV['DATABASE_URL'] فسيُستخدم هذا الملف للاتصال بقاعدة البيانات الخاصة بك:
$ cat config/database.yml
development:
adapter: postgresql
database: my_database
host: localhost
$ echo $DATABASE_URL
إذا كان لديك كلًا من config/database.yml وENV['DATABASE_URL'] فسيدمج Rails الضبط معًا، ولفهم هذا بشكل أفضل، يجب أن نرى بعض الأمثلة.
عندما توفّر معلومات الاتصال المكررّة، سيأخذ متغيّر البيئة الأولويّة:
$ cat config/database.yml
development:
adapter: sqlite3
database: NOT_my_database
host: localhost
$ echo $DATABASE_URL
postgresql://localhost/my_database
$ bin/rails runner 'puts ActiveRecord::Base.configurations'
{"development"=>{"adapter"=>"postgresql", "host"=>"localhost", "database"=>"my_database"}}
هنا يتطابق adapter وhost وdatabase مع المعلومات المتوفّرة في ENV['DATABASE_URL'].
إذا تم توفير معلومات غير مكرّرة ستحصل على جميع القيم الفريدة، وسيأخذ متغيّر النظام الأسبقيّة في حالة أي تعارضات.
$ cat config/database.yml
development:
adapter: sqlite3
pool: 5
$ echo $DATABASE_URL
postgresql://localhost/my_database
$ bin/rails runner 'puts ActiveRecord::Base.configurations'
{"development"=>{"adapter"=>"postgresql", "host"=>"localhost", "database"=>"my_database", "pool"=>5}}
بما أن pool ليس في المعلومات المقدمّة في ENV['DATABASE_URL']، فستدمج معلوماته، وبما أن adapter مكرّر، فستفوز معلومات اتصال ENV['DATABASE_URL'].
تتمثّل الطريقة الوحيدة لعدم استخدام معلومات الاتصال بشكل صريح في ENV['DATABASE_URL'] في تحديد اتصال URL صريح باستخدم المفتاح الفرعي "url":
$ cat config/database.yml
development:
url: sqlite3:NOT_my_database
$ echo $DATABASE_URL
postgresql://localhost/my_database
$ bin/rails runner 'puts ActiveRecord::Base.configurations'
{"development"=>{"adapter"=>"sqlite3", "database"=>"NOT_my_database"}}
يتجاهل هنا معلومات الاتصال في ENV['DATABASE_URL']، لاحظ اختلاف adapter واسم قاعدة البيانات.
نظرًا لأنه من الممكن تضمين ERB في config/database.yml، فمن الأفضل أن تظهر بوضوح أنك تستخدم ENV['DATABASE_URL'] للاتصال بقاعدة البيانات، وهذا مفيد بشكل خاص في الإنتاج لأنه يجب أن لا تودع الأسرار مثل كلمة مرور قاعدة البيانات إلى متحكّم المصدر الخاص بك (مثل Git).
$ cat config/database.yml
production:
url: <%= ENV['DATABASE_URL'] %>
أصبح السلوك الآن واضح، أننا لا نستخدم سوى معلومات الاتصال في ENV['DATABASE_URL'].
ضبط قاعدة بيانات SQLite3
يأتي Rails مع دعم مضمّن لـ SQLite3، وهو تطبيق قاعدة بيانات خفيف بدون خوادم، وبما أن بيئة انتاج مزدحم قد تفرط في تحميل SQLite، فإنه يعمل بشكل جيّد من أجل التطوير والاختبار، ويفترض Rails افتراضيًا استخدام قاعدة بيانات SQLite عند إنشاء مشروع جديد، لكن يمكنك دائمًا تغييره لاحقًا.
في ما يلي قسم ملف الضبط الافتراضي (config/database.yml) مع معلومات الاتصال لبيئة التطوير:
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
ملاحظة: يستخدم Rails قواعد بيانات SQLite3 لتخزين البيانات بشكل افتراضي لأن قاعدة البيانات لا تحتاج إلى ضبط، ويدعم Rails MySQL (بما في ذلك MariaDB) أيضًا و PostgreSQL "خارج الصندوق" ولديه ملحقات للعديد من أنظمة قواعد البيانات، وإذا كنت تستخدم قاعدة البيانات في بيئة الإنتاج، فغالبا ما يكون Rails محوّل لها.
ضبط قاعدة بيانات MySQL أو MariaDB
إذا اخترّت استخدام MySQL أو MariaDB بدلًا من SQLite3، فسيبدو ملف config/database.yml مختلف قليلًا، وهذا هو قسم التطوير الخاص به:
development:
adapter: mysql2
encoding: utf8
database: blog_development
pool: 5
username: root
password:
socket: /tmp/mysql.sock
إذا كانت قاعدة بياناتك تملك مستخدم جذر مع كلمة مرور فارغ، فسيعّمل هذا الضبط لك، وخلاف ذلك، يجب عليك تغيير اسم المستخدم وكلمة المرور في قسم التطوير.
ضبط قاعدة بيانات PostgreSQL
إذا اخترت استخدام PostgreSQL، فيجب تخصيص ملف config/database.yml لاستخدام قواعد بيانات PostgreSQL:
development:
adapter: postgresql
encoding: unicode
database: blog_development
pool: 5
يتم تمكين البيانات المعدّة (Prepared Statements) بشكل افتراضي في PostgreSQL، ويمكنك تعطيل ذلك عن طريق تعيين prepared_statements إلى false:
production:
adapter: postgresql
prepared_statements: false
إذا كان مفعّل، سيُنشئ Active Record 1000 بيان معّد لاتصال قاعدة البيانات بشكل افتراضي، ولتعديل هذا السلوك، يمكنك تعيين statement_limit إلى قيمة مختلفة:
production:
adapter: postgresql
statement_limit: 200
كلما زادت البيانات المعّدة استخدامًا كلما زدات الذاكرة التي تتطلّبها قاعدة البيانات الخاص لك، وإذا وصلت قاعدة بيانات PostgreSQl لحدود الذاكرة، فجرّب تقليل statement_limit أو تعطيل العبارات المعّدة.
ضبط قاعدة بيانات SQLite3 لمنصة JRuby
إذا اخترت استخدام SQLite3 وأنت تستخدم JRuby، فسيبدو ملف config/database.yml مختلفًا قليلًا، وهذا شكل قسم التطوير:
development:
adapter: jdbcsqlite3
database: db/development.sqlite3
ضبط قاعدة بيانات MySQL أو MariaDB لمنصة JRuby
إذا اخترت استخدام MySQL أو MariaDB وأنت تستخدم JRuby، فسيبدو ملف config/database.yml مختلفًا قليلًا، وهذا شكل قسم التطوير:
development:
adapter: jdbcmysql
database: blog_development
username: root
Password:
ضبط قاعدة بيانات PostgreSQL لمنصة JRuby
إذا اخترت استخدام PostgreSQL وأنت تستخدم JRuby، فسيبدو ملف config/database.yml مختلفًا قليلًا، وهذا شكل قسم التطوير:
development:
adapter: jdbcpostgresql
encoding: unicode
database: blog_development
username: blog
Password:
غيّر اسم المستخدم وكلمة المرور في قسم التطوير بالشكل المناسب.
إنشاء بيئات Rails
يأتي Rails مع 3 بيئات: "التطوير" و "الاختبار" و "الإنتاج"، وفي حين أن هذه كافية لمعظم حالات الاستخدام، فهنالك ظروف تحتاج فيها إلى المزيد من البيئات.
تخيّل أن لديك خادمًا يشبه بيئة الإنتاج لكنه يُستخدم فقط للاختبار، يطلق على هذا الخادم اسم "خادم التدريج " - "staging server"، ولتعريف بيئة تسمى "staging" لهذا الخادم، أنشئ ملف باسم config/environments/staging.rb ويرجى استخدام محتويات أي ملف موجود في config/environments كنقطة بداية وعدّل بعدها كما تريد.
هذه البيئة لا تختلف عن الافتراضيّة، ابدء الخادم باستخدام rails server -e staging ووحدة تحكم مع rails console -e staging, Rails.env.staging? تعمل أيضًا …
النشر إلى دليل فرعي (جذر url نسبي)
يفترض Rails بشكل افتراضي أن التطبيق يعمل في الجذر (على سبيل المثال /) ويشرح لك هذا القسم كيفيّة تشغيل التطبيق الخاص بك داخل مجلّد.
لنفترض أننا نريد نشر تطبيقنا على "/app1"، يحتاج Rails إلى معرفة هذا المجلّد لإنشاء المسارات المناسبة:
config.relative_url_root = "/app1"
وبدلًا من ذلك، يمكنك ضبط متغيّر البيئة RAILS_RELATIVE_URL_ROOT.
سيضيف Rails الآن "/app1" عند إنشاء الروابط.
استخدام Passenger
يسهّل Passenger هذه العمليّة، يمكنك العثور على الضبط المناسب في دليل Passenger.
استخدام وكيل عكسي
يتمتع نشر تطبيقك باستخدام وكيل عكسي (Reverse Proxy) بمزايا كثيرة، فهي تسمح لك بمزيد من التحكم في الخادم الخاص بك عن طريق وضع المكونات المطلوبة في تطبيقك في طبقات.
يمكن استخدام العديد من خوادم الويب الحديثة كخادم وكيل لتحقيق التوازن بين عناصر الجهات الخارجيّة مثل خوادم التخزين المؤقت أو خوادم التطبيقات.
وأحد هذه التطبيقات التي يمكنك تشغيلها خلف الخادم العكسي هو Unicorn.
في هذه الحالة، ستحتاج إلى ضبط خادم الوكيل (NGINX، Apache ...) إلى قبول الاتصالات من تطبيق الخادم (Unicorn)، وبشكل افتراضي سيستمع Unicorn إلى اتصالات TCP على المنفذ 8080، لكن يمكنك تغيير المنفذ أو ضبطة لاستخدام sockets بدلًا من ذلك.
يمكنك العثور على المزيد من المعلومات في Unicorn readme وفهم الفلسفة الكامنة وراء ذلك.
بمجرّد ضبط خادم التطبيق، يجب عليك توجيه طلبات الوكيل إليه عن طريق ضبط خادم الويب بشكل مناسب، على سبيل المثال، قد يتضمّن NGINX الخاص بك التالي:
upstream application_server {
server 0.0.0.0:8080;
}
server {
listen 80;
server_name localhost;
root /root/path/to/your_app/public;
try_files $uri/index.html $uri.html @app;
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://application_server;
}
# some other configuration
}
تأكد من قراءة وثائق NGINX للحصول على أحدث المعلومات.
إعدادات بيئة Rails
يمكن أيضًا ضبط بعض أجزاء Rails خارجيًا من خلال توفير متغيرات البيئة، ويتعرّف على المتغيرات البيئة التالية من خلال أجزاء مختلفة من Rails:
- ENV["RAILS_ENV"] تعرّف بيئة Rails (production، development و test ...) والتي سيعمل Rails تحتها.
- ENV["RAILS_RELATIVE_URL_ROOT"] يستخدم بواسطة رمز التوجيه للتعرّف على عناوين URL عند نشر تطبيقك إلى مجلّد فرعي.
- ENV["RAILS_CACHE_ID"] وENV["RAILS_APP_VERSION"] يُستخدمان لإنشاء مفاتيح ذاكرة تخزين مؤقت موسّعة في شيفرة التخزين المؤقت لـ Rails، ويسمح هذا لك بأن يكون لديك عدة مخازن منفصلة من نفس التطبيق.
استخدام ملفات Initializer
بعد تحميل الإطار وبقية gems في تطبيقك، يتحوّل Rails لتحميل Initializers، وهذا الأخير هو أي ملف روبي مخزّن تحت config/initializers في تطبيقك، ويمكنك استخدام Initializers، للاحتفاظ بإعدادات الضبط التي يجب إجراؤها بعد تحميل جميع الأطر وgems، مثل خيارات الإعداد لهذه الأجزاء.
ملاحظة: يمكنك استخدام المجلدات الفرعيّة لتنظيم Initializers الخاصة بك إذا أردت ذلك، لأن Rails سينظر إلى التسلسل الهرمي بأكملة من مجلد Initializers إلى الداخل.
تنبيه: يبنما يدعم Rails ترقيم أسماء ملفات Initializers لأغراضي ترتيب التحميل، فإن الأسلوب الأفضل هو وضع أي شيفرة برمجية مطلوبة للتحميل بترتيب معيّن داخل نفس الملف، ويقلل هذا تذرّع اسم الملف، ويجعل التبعيات أكثر وضوحاً، ويمكن أن يساعد في طرح مفاهيم جديدة داخل تطبيقك.
أحداث التهيئة
يحتوي Rails على 5 أحداث تهيئة يمكن ربطها (مدرجة بترتيب التشغيل):
- Before_configuration: يشتغل هذا بمجرّد أن يرث ثابت التطبيق من Rails::Application، وتقيّم استدعاءات config قبل حدوث ذلك.
- Before_initialize: يشتغل هذا مباشرةً قبل حدوث عملية التهيئة الخاصة بالتطبيق باستخدام :bootstrap_hook initializer بالقرب من بداية عملية تهيئة Rails.
- To_prepare: يشتغل بعد تشغيل initializer لجميع Railties (بما في ذلك التطبيق نفسه)، لكن قبل eager loading وبناء كومة الوسيط. الأهم من ذلك، سيعمل على كل طلب في التطوير، لكن مرة واحدة (أثناء التشغيل) في الإنتاج والاختبار.
- Before_eager_load: يشتغل هذا مباشرةً قبل حدوث eager loading، والذي هو السلوك الافتراضي لبيئة الإنتاج وليس لبيئة التطوير.
- After_initialize: يشتغل مباشرةً بعد تهيئة التطبيق، وبعد تشغيل مهئيات التطبيق في config/initializers.
لتعريف حد لهذه hooks، استخدم صياغة الكتلة داخل الصنف الفرعي Rails::Application أو Rails::Railtie أو Rails::Engine:
module YourApp
class Application < Rails::Application
config.before_initialize do
# initialization code goes here
end
end
End
بدلًا من ذلك، يمكنك إجراء ذلك من خلال تابع config في كائن Rails.application:
Rails.application.config.before_initialize do
# initialization code goes here
End
تحذير: لم تعدّ بعد بعض أجزاء التطبيق، ولا سيما التوجيه، في النقطة التي تُستدعى فيها كتلة after_initialize.
Rails::Railtie#initializer
يحتوي Rails على العديد من initializers التي تعمل عند بدء التشغيل والتي تم تعريفها كافة باستخدام التابع initializer من Rails::Railtie. وهذا مثال على مهيئ set_helpers_path من Action Controller:
initializer "action_controller.set_helpers_path" do |app|
ActionController::Helpers.helpers_path = app.helpers_paths
End
يأخذ التابع initializer ثلاثة معاملات حيث أن الأول هو اسم المهيئ والثاني هو hash اختياري (غير معروض هنا) والثالث هو كتلة، يمكن تحديد مفتاح :before في hash الخيارات لتحديد المهيئ الجديد الذي يجب تشغيله أولًا، ومفتاح :after سيحدد المهيئ لتشغيل هذا المهيئ فيما بعد.
ستشتغل المهيئات المعرّفة باستخدام تابع initializer بالترتيب الذي تم تعريفها فيه، باستثناء تلك التي تستخدم توابع :before و:after.
تحذير: يمكنك وضع المهيئ الخاص بك قبل أو بعد أي مهيئ آخر في السلسلة، طالما أنه منطقي، لنفترض أن لديك 4 مهيئات تسمى من "one" إلى "four" (معرّفة بهذا الترتيب) ولقد عرّفت "four" لتعمل قبل "four" لكن بعد "three" وهذا ليس منطقيًا ولن يتمكن Rails من تحديد ترتيب المهيئ الخاص بك.
يعتبر معامل الكتلة لتابع initializer هو مثيل من التطبيق نفسه، ولذا يمكنن الوصول إلى ضبطه باستخدام تابع config كما في المثال.
بما أن Rails::Application يرث من Rails::Railtie (بشكل غير مباشر)، يمكنك استخدام تابع initializer فيconfig/application.rb لتعريف المهيئات للتطبيق.
المهيئات
فيما يلي قائمة شاملة لجميع المهيئات الموجودة في Rails بالترتيب الذي تم تعريفهم (وبالتالي تشغيلها ما لم يُنص على خلاف ذلك).
- Load_environment_hook: يعمل كماسك للمكان (placeholder) بحيث يمكن تعريف :load_environment_config ليشتغل قبله.
- Load_active_support: يتطلّب active_support/dependencies الذي يعد الأساس لـ Active Support، وهو يتطلّب اخياريًا active_support/all إذا كان config.active_support.bare غير صادق (un-truthful) وهو الإعداد الافتراضي.
- Initialize_logger: يهيئ المسجّل (كائن ActiveSupport::Logger) للتطبيق ويجعله يمكن الوصول إليه في Rails.logger، بشرط أن لا يوجود مهيئ مدرج قبل هذه النقطة عرّف Rails.logger.
- Initialize_cache: إذا لم يعّد Rails.cache بعد فهيئ ذاكرة التخزين المؤقت بالرجوع إلى القيمة الموجودة في config.cache_store وخزّن النتائج كـ Rails.cache، إذا كان الكائن يستجيب لتابع الوسيط، يُدرج الوسيط الخاص به قبل Rack::Runtime في كومة الوسيط.
- Set_clear_dependencies_hook: هذا المهيئ - الذي يعمل فقط في حالة كان cache_classes يساوي false - يستخدم ActionDispatch::Callbacks.after لإزالة الثوابت المشار إليها أثناء الطلب من مساحة الكائن بحيث يعاد تحميلها أثناء الطلب التالي.
- Initialize_dependency_mechanism: إذا كان config.cache_classes يساوي true، يكوّن ActiveSupport::Dependencies.mechanism لتطلب التبعيات بدلًا من تحميلها.
- Bootstrap_hook: يشغّل جميع كتل before_initialize المكوّنة.
- I18n.callbacks: في بيئة التطوير، عيّن رد نظام to_prepare الذي سيستدعي I18n.reload! إذا تغيّرت أي من المحليات منذ آخر طلب، وفي وضع الإنتاج، سيشتغل هذا الاستدعاء فقط عند الطلب الأول.
- Active_support.deprecation_behavior: يُعدّ تقارير الإهمال للبيئات، وهو بشكل افتراضي :log للتطوير و:notify للإنتاج و :stderr للإختبار، وإذا لم تعيّن قيمة لـ config.active_support.deprecation فسيطالب هذا المهيئ المستخدم بضبط هذا السطر في ملف config/environments الخاص بالبيئة الحالية. يمكن ضبطه إلى مصفوفة من القيم.
- Active_support.initialize_time_zone: يعيّن المنطقة الزمنيّة الافتراضيّة للتطبيق استنادًا إلى إعداد config.time_zone والذي يساوي افتراضيًا "UTC".
- Active_support.initialize_beginning_of_week: يعيّن بداية الأسبوع للتطبيق استنادًا إلى إعداد config.beginning_of_week والذي يساوي افتراضيًا :monday.
- Active_support.set_configs: يُعد Active Support باستخدام الإعدادت الموجودة في config.active_support عن طريق إرسال أسماء التوابع كـ setters إلى ActiveSupport وتمرير القيم من خلالها.
- Action_dispatch.configure: ضبط ActionDispatch::Http::URL.tld_length لتعيين قيمة config.action_dispatch.tld_length.
- Action_view.set_configs: إعداد Action View عن طريق استخدام الإعدادات الموجودة في config.action_view عن طريق إرسال أسماء التوابع كـ setters إلى ActionView::Base وتمرير القيم من خلالها.
- Action_controller.assets_config: تهيئة config.actions_controller.assets_dir إلى مجلّد التطبيق العام إذا لم يكوّن بشكل صريح.
- Action_controller.set_helpers_path: يعيّن helpers_path الخاص بـ Action Controller إلى helpers_path الخاص بالتطبيق.
- Action_controller.parameters_config: يكوّن خيارات معاملات قويّة لـ ActionController::Parameters.
- Action_controller.set_configs: يعّد Action Controller عن طريق استخدام الإعدادات الموجودة في config.action_controller عن طريق إرسال أسماء التوابع كـ setters إلى ActionController::Base وتمرير القيم من خلالها.
- Action_controller.compile_config_methods: يهيئ التوابع لإعدادات config المحددة بحيث تكون أسرع في الوصول.
- Active_record.initialize_timezone: يعيّن ActiveRecord::Base.time_zone_aware_attributes إلى true كما يعّد ActiveRecord::Base.default_timezone إلى UTC. عند قراءة السمات من قاعدة البيانات، ستحوّل إلى المنطقة الزمنيّة المحددة بواسطة Time.zone.
- Active_record.logger: يعيّن ActiveRecord::Base.logger - إذا لم يُعيّن بالفعل - إلى Rails.logger.
- Active_record.migration_error: يعد الوسيطات للتأكد من وجود عمليات تهجير معلّقة.
- Active_record.check_schema_cache_dump: يحمّل ملف تفريغ التخزين المؤقت للمخطّط إذا هيئ بالفعل وكان متاحًا.
- Active_record.warn_on_records_fetched_greater_than: يُمكّن التحذيرات عند تُرجع الاستعلامات عدد كبير من السجلات.
- Active_record.set_configs: يُعّد Active Record عن طريق استخدام الإعدادات الموجودة في config.active_record عن طريق ارسال أسماء التوابع كـ setters إلى ActiveRecord::Base وتمرير القيم من خلالها.
- Active_record.initialize_database: يحمّل إعدادات قاعدة البيانات (افتراضيًا) من config/database.yml ويُنشئ اتصال للبيئة الحاليّة.
- Active_record.log_runtime: يضمّن ActiveRecord::Railties::ControllerRuntime الذي هو المسؤول عن الإبلاغ عن الوقت الذي يستغرقه استدعاءات Active Record لعودة الطلب إلى logger.
- Active_record.set_reloader_hooks: يعيد تعيين جميع الاتصالات القابلة لإعادة التحميل إلى قاعدة البيانات في حالة تعيين config.cache_classes كـ false.
- Active_record.add_watchable_files: يضيف ملفات schema.rb و structure.sql إلى الملفات المراقبة.
- Active_job.logger: يعيّن ActiveJob::Base.logger - إذا لم تضبط بالفعل - إلى Rails.logger.
- Active_job.set_configs: يُعّد Active Job عن طريق استخدام الإعدادات الموجودة في config.active_job عن طريق ارسال أسماء التوابع كـ setters إلى ActiveJob::Base وتمرير القيم من خلالها.
- Action_mailer.logger: يعيّن ActionMailer::Base.logger - إذا لم تضبط بالفعل - إلى Rails.logger.
- Action_mailer.set_configs: يعد Action Mailer عن طريق استخدام الإعدادات الموجودة في config.action_mailer عن طريق ارسال أسماء التوابع كـ setters إلى ActionMailer::Base وتمرير القيم من خلالها.
- Action_mailer.compile_config_methods: يهيئ التوابع لإعدادات config المحددة بحيث يكون الوصول إليها أسرع.
- Set_load_path: يعمل هذا المهيئ قبل bootstrap_hook ويضيف المسارات المحددة بواسطة config.load_paths وجميع مسارات التحميل التلقائي إلى $LOAD_PATH.
- Set_autoload_paths: يعمل هذا المهيئ قبل bootstrap_hook ويضيف جميع مجلدات app الفرعية والمسارات المحددة بواسطة config.autoload_paths وconfig.eager_load_paths وconfig.autoload_once_paths إلى ActiveSupport::Dependencies.autoload_paths.
- Add_routing_paths: تحميل (بشكل افتراضي) جميع ملفات config/routes.rb (في التطبيق و railties بما في ذلك المحركات) وإعداد المسارات للتطبيق.
- Add_locales: يضيف الملفات في config/locales (من التطبيق وrailties والمحركات) إلى I18n.load_path مما يتيح الترجمات في هذه الملفات.
- Add_view_paths: يضيف مجلد app/views من التطبيق وrailties والمحركات إلى مسار البحث لملفات العرض للتطبيق.
- Load_environment_config: تحميل ملف config/environments للبيئة الحاليّة.
- Prepend_helpers_path: يضيف مجلّد app/helpers من التطبيق وrailties والمحركات إلى مسار البحث للمساعدين للتطبيق.
- Load_config_initializers: تحميل جميع ملفات روبي من config/initializers في التطبيق وrailties والمحركات، يمكن استخدام الملفات الموجودة في هذا المجلّد لاستيعاب إعدادات الضبط التي يجب إجراؤها بعد تحميل جميع إطارات العمل.
- Engines_blank_point: يوفر نقطة في التهيئة (point-in-initialization) للربط إذا كنت ترغب في القيام بأي شيء قبل تحميل المحركات، بعد هذه النقطة، ستشتغل جميع مهيئات railtie والمحرك.
- Add_generator_templates: إيجاد القوالب للمولدات في lib/templates للتطبيق، railties والمحركات ويضيف هذه إلى إعداد config.generators.templates الذي سيجّعل القوالب متاحة لجميع المولدات للإشارة إليها.
- Ensure_autoload_once_paths_as_subset: التأكد أن config.autoload_once_paths لا يحتوي إلا على مسارات من config.autoload_paths وإذا كان يحتوي على مسارات إضافيّة، فسيرفع استثناء.
- Add_to_prepare_blocks: تضاف الكتلة لجميع استدعاءات config.to_prepare في التطبيق أو railtie أو المحرك إلى ردود النداء to_prepare لـ Action Dispatch والتي ستشتغل لكل طلب في التطوير أو قبل أول طلب في الإنتاج.
- Add_builtin_route: إذا كان التطبيق قيد التشغيل في بيئة التطوير، فسيؤدي ذلك إلى إلحاق مسار لـ rails/info/properties إلى مسارات التطبيق، ويوفّر هذا المسار معلومات تفصيليّة مثل إصدار Rails وروبي لـ public/index.html في تطبيق Rails الافتراضي.
- Build_middleware_stack: بناء كومة وسيط للتطبيق، ويرّجع كائن يملك تابع call التي تأخذ كائن بيئة Rack للطلب.
- Eager_load!: إذا كان config.eager_load يساوي true، فستشتغل خطافات config.before_eager_load ومن ثم استدعاءات eager_load! التي ستحمّل جميع config.eager_load_namespaces.
- Finisher_hook: يوفّر خطافًا بعد اكتمال تهيئة عملية التطبيق، بالإضافة إلى تشغيل جميع كتل config.after_initialize للتطبيق وrailties والمحركات.
- Set_routes_reloader_hook: يكوّن Action Dispatch لإعادة تحميل ملف المسارات باستخدام ActiveSupport::Callbacks.to_run.
- Disable_dependency_loading: يعطّل تحميل التبعيّة التلقائي إذا لم يعيّن config.eager_load على true.
تجميع قواعد البيانات
تدار اتصالات قواعد بيانات Active Record عن طريق ActiveRecord::ConnectionAdapters::ConnectionPool الذي يضمن تزامن مجمع الاتصالات كميّة الوصول الخيوط إلى عدد محدود من اتصالات قاعدة البيانات، الحد الافتراضي لهذا هو 5 ويمكن ضبطه في database.yml.
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
نظرًا لأنه يتعامل مع تجمع الاتصالات داخل Active Record افتراضيًا، يجب أن تعمل جميع خوادم التطبيقات (Thin، Puma، Unicorn ….) بنفس الطريقة، إن قاعدة بيانات مجمع الاتصالات فارغ افتراضيًا، كلما زاد الطلب على الاتصالات، سيؤدي إلى ضبطها حتى تصل إلى حد مجمع الاتصالات.
أي طلب سيتحقق من الاتصال المطلوب إلى قاعدة البيانات في المرة الأولى وفي نهاية الطلب، سيتحقق من إرجاع الاتصال، وهذا يعني أن فتحة الاتصال الإضافية ستتوفّر مرة أخرى للطلب التالي في قائمة الانتظار.
إذا حاولت استخدام اتصالات أكثر من تلك المتاحة، فسيحظرك Active Record وسينتظر اتصال من المجمع، وإذا لم يتمكن من الحصول على اتصال، فسيرمي خطأ انتهاء المهلة تشبه لتلك الموجودة أدناه.
ActiveRecord::ConnectionTimeoutError - could not obtain a database connection within 5.000 seconds (waited 5.000 seconds)
إذا حصلت على الخطأ أعلاه، فقد ترغب في زيادة حجم مجمع الاتصال عن طريق زيادة خيار pool في database.yml.
ملاحظة: إذا كنت تعمل في بيئة متعددة الخيوط، فقد تكون هنالك فرصة لأن العديد من الخيوط قد تصل إلى عدة اتصالات في نفس الوقت، وبناءًا على تحميل الطلب الحالي، قد يكون لديك العديد من الخيوط التي تتنافس على عدد محدود من الاتصالات.
الضبط المخصًص
يمكنك ضبط الشيفرة البرمجية الخاصة بك من خلال كائن ضبط Rails مع ضبط مخصص تحت إما مساحة الاسم config.x أو config مباشرةً، والفرق الرئيسي بين هذيّن هو أنه يجب أن تستخدم config.x إذا كنت تعرّف ضبط متداخل (مثلًا: config.x.nested.nested.hi) وconfig لضبط مستوى واحد (مثلًا: config.hello).
config.x.payment_processing.schedule = :daily
config.x.payment_processing.retries = 3
config.super_debugger = true
هذه نقاط الضبط متاحة بعد ذلك من خلال كائن الضبط:
Rails.configuration.x.payment_processing.schedule # => :daily
Rails.configuration.x.payment_processing.retries # => 3
Rails.configuration.x.payment_processing.not_set # => nil
Rails.configuration.super_debugger # => true
يمكنك أيضًا استخدام Rails::Application.config_for لتحميل ملفات الضبط بأكملها:
# config/payment.yml:
production:
environment: production
merchant_id: production_merchant_id
public_key: production_public_key
private_key: production_private_key
development:
environment: sandbox
merchant_id: development_merchant_id
public_key: development_public_key
private_key: development_private_key
# config/application.rb
module MyApp
class Application < Rails::Application
config.payment = config_for(:payment)
end
End
Rails.configuration.payment['merchant_id'] # => production_merchant_id or development_merchant_id
فهرسة محركات البحث
في بعض الأحيان، قد ترغب في منع ظهور بعض صفحات تطبيقك على مواقع البحث من Google أو Bing أو Yahoo أو Duck Duck Go، تعمل برامج الروبوتات التي تفهرس هذه المواقع أولًأ على تحليل ملف http://your-site.com/robots.txt لمعرفة الصفحات التي يُسمح لها بفهرستها.
ينشئ Rails هذا الملف داخل مجلد /public وافتراضيًا، يسمح لمحركات البحث بفهرسة جميع صفحات تطبيقك، وإذا كنت ترغب في حظر فهرسة في جميع صفحات تطبيقك، فاستخدم هذا:
User-agent: *
Disallow: /
لحظر فهرسة صفحات محدّدة فقط، فمن الضروري استخدام صياغة أكثر تعقيدًا، تعلّم ذلك على الوثائق الرسميّة.
رصد نظام الملفات المنفذة
عند تحميل gem الاستماع، فإن Rails يستخدم مراقب نظام الملفات منفذة للكشف على التغييرات عندما يكون config.cache_classes يساوي false:
group :development do
gem 'listen', '>= 3.0.5', '< 3.2'
end
خلاف ذلك، في كل طلب، يمر Rails على شجرة التطبيق للتأكد ما إذا قد تغيّر أي شيء.
لا توجد حاجة إلى gem إضافيّة في لينكس وماك، ولكن بعضها مطلوب لـ *BSD و ويندوز.
لاحظ أن بعض أجهزة الإعداد غير مدعومة.
https://guides.rubyonrails.org/configuring.html