ماذا يحدث عند إنشاء مشروع ريلز جديد

قد تكون المرة الأولى التي تفتح فيها جهازك الطرفي وتكتب rails newالعدد الهائل من الملفات والمجلدات التي تم إنشاؤها أمرًا هائلاً. يمكنك حتى العمل في العديد من مشاريع ريلز دون فتح العديد من هذه المجلدات - فما هي بالضبط؟ ماذا يفعلون وراء الكواليس؟

حسنًا ، الحقيقة هي أنك لست بحاجة إلى الكثير منها وأن ريلز لديها العديد من العلامات المضمنة في newالأمر والتي ستتيح لك إنشاء مشروع جديد بدون بعض الإعدادات الافتراضية المضمنة في ريلز (لمعرفة المزيد فقط اكتب rails new —help) . ومع ذلك ، بالنسبة لمعظم المشاريع ، ستقوم rails newبإنشاء مجلد مشروع بغيض.

في هذا المنشور ، سأستعرض كل ملف ومجلد في مشروع Rails 6 الجديد. لا تتردد في استخدام هذا كمرجع لأنك تعمل من خلال مشروع ريلز الجديد لفهم بعض المجلدات الأكثر غموضًا. ضع إشارة مرجعية على هذا المنشور وارجع إليه في أي وقت تجد نفسك في أعشاب في مشروع ريلز جديد.

دعنا نبدأ:

rails new example-project

واو هذا كثير!

أولاً ، تقوم ريلز بإنشاء جميع الملفات والمجلدات المطلوبة بواسطة تطبيق ريلز جديد.

ثم يتم جلب الأحجار الكريمة وتجميعها ؛ هذه هي التبعيات التي يحتاجها ريلز لتشغيل موقع الويب الخاص بك في أبسط أشكاله. يبدو مثل الكثير؟ إنه كذلك إلى حد ما ، لكن هذه الأحجار الكريمة تضيف الوظائف التي تجعل مشروع ريلز سهل الانطلاق. كل ما عليك فعله الآن هو التشغيل rails serverولديك تطبيق ويب يعمل محليًا: هذا قوي جدًا وليس شيئًا يمكنك الحصول عليه بسهولة / بدون / كل هذا النموذج المعياري.

دعنا ندخل إلى كل هذه المجلدات:

 create README.md create Rakefile create .ruby-version create config.ru create .gitignore create Gemfile run git init from "." Initialized empty Git repository in /Users/tfantina/Documents/Code/FileStructure/.git/ create package.json create app create app/assets/config/manifest.js create app/assets/stylesheets/application.css create app/channels/application_cable/channel.rb create app/channels/application_cable/connection.rb create app/controllers/application_controller.rb create app/helpers/application_helper.rb create app/javascript/channels/consumer.js create app/javascript/channels/index.js create app/javascript/packs/application.js create app/jobs/application_job.rb create app/mailers/application_mailer.rb create app/models/application_record.rb create app/views/layouts/application.html.erb create app/views/layouts/mailer.html.erb create app/views/layouts/mailer.text.erb create app/assets/images/.keep create app/controllers/concerns/.keep create app/models/concerns/.keep create bin create bin/rails create bin/rake create bin/setup create bin/yarn create config create config/routes.rb create config/application.rb create config/environment.rb create config/cable.yml create config/puma.rb create config/spring.rb create config/storage.yml create config/environments create config/environments/development.rb create config/environments/production.rb create config/environments/test.rb create config/initializers create config/initializers/application_controller_renderer.rb create config/initializers/assets.rb create config/initializers/backtrace_silencers.rb create config/initializers/content_security_policy.rb create config/initializers/cookies_serializer.rb create config/initializers/cors.rb create config/initializers/filter_parameter_logging.rb create config/initializers/inflections.rb create config/initializers/mime_types.rb create config/initializers/new_framework_defaults_6_0.rb create config/initializers/wrap_parameters.rb create config/locales create config/locales/en.yml create config/master.key append .gitignore create config/boot.rb create config/database.yml create db create db/seeds.rb create lib create lib/tasks create lib/tasks/.keep create lib/assets create lib/assets/.keep create log create log/.keep create public create public/404.html create public/422.html create public/500.html create public/apple-touch-icon-precomposed.png create public/apple-touch-icon.png create public/favicon.ico create public/robots.txt create tmp create tmp/.keep create tmp/cache create tmp/cache/assets create vendor create vendor/.keep create test/fixtures create test/fixtures/.keep create test/fixtures/files create test/fixtures/files/.keep create test/controllers create test/controllers/.keep create test/mailers create test/mailers/.keep create test/models create test/models/.keep create test/helpers create test/helpers/.keep create test/integration create test/integration/.keep create test/channels/application_cable/connection_test.rb create test/test_helper.rb create test/system create test/system/.keep create test/application_system_test_case.rb create storage create storage/.keep create tmp/storage create tmp/storage/.keep 

لنقفز في:

cd example-project code . 

سنعمل بالترتيب بينما ينظمهم ريلز ، في معظم الأحيان ، سأتحدث عن كل مجلد وملف ، بالنسبة للملفات المتكررة (مثل .keep) سأذكرها مرة واحدة فقط. ستلاحظ الكثير من الاتفاقيات في القضبان مثل "application_ [إطار] ق" ( application_controller.rb، application_helper.rb، application_job.rbالخ). في مثل هذه الحالات ، سأغطي المجلد بالتفصيل حتى تعرف ما الذي يدخل بداخله ، واعلم فقط أن الملف الحالي "application _ [...]. rb" هو فئة رئيسية ترث منها الفئات الأخرى التي تنشئها في المجلد.

مجلد التطبيق

هو المكان الذي ستتم فيه غالبية أعمال التطوير الخاصة بك / يحتوي التطبيق على النماذج وطرق العرض ووحدات التحكم التي سيتم تقديمها للمستخدمين عند طلب المتصفح.

التطبيق / الأصول

يخزن الأصول لخط أنابيب أصول ريلز. يجمع Asset Pipeline الأصول (JavaScript و CSS والصور) في المشروع ويقدمها للعميل بأكثر الطرق فعالية. يقوم بذلك عن طريق تسلسل الأصول وتصغيرها. كما أنه يجمع الأصول المكتوبة بلغة Sass و CoffeeScript مسبقًا.

مزيد من المعلومات: The Asset Pipeline - Ruby on Rails Guides

التطبيق / الأصول / التكوين

انظر أدناه

التطبيق / الأصول / config / manifest.js

يتم إدارة خط أنابيب الأصول المذكور أعلاه بواسطة جوهرة روبي تسمى "Sprockets-rails" والتي تقوم بكل ما سبق. تحتوي "Sprockets-rails" على بعض الأحجار الكريمة المساعدة المرتبطة بها مثل "sass-rails" و "uglifier" و "Coffee-rails". تقوم Coffee-rails و Sass-rails بترجمة Sass و CoffeeScript مسبقًا إلى CSS و JavaScript بينما يقوم Uglifier بتصغير هذه الأصول. يتيح لك Manifest.js تعيين ما سيتم تجميعه مسبقًا على وجه التحديد.

لمزيد من المعلومات حول هذا الملف المحدد ، راجع: eileen.codes | القضبان 5: The Sprockets 4 Manifest

التطبيق / الأصول / الصور

يمكن هنا وضع أصول الصور ، مثل الرموز و SVGs لخط أنابيب الأصول.

.احتفظ

هذا هو الأول من بين العديد من ملفات .keep التي ستراها خلال مشروع Rails الجديد. هذه ليست ملفات ريلز ولكنها ملفات لـ Git والتي لا تتتبع عادةً المجلدات الفارغة. الحفظ. الملف يقول فقط "شخص ما هنا". أي شيء يحتوي على ملف .keep سيتم تتبعه بواسطة Git. لا تحتاج. keep إذا وضعت شيئًا آخر في المجلد.

التطبيق / الأصول / أوراق الأنماط

مجلد أوراق الأنماط هو المكان الذي ستضع فيه الأنماط المرتبطة بتطبيقك. يمكنك كتابة أوراق أنماط في CSS أو SASS خارج الصندوق. ، سيقوم Asset Pipeline بترجمة أي وجميع أوراق الأنماط مسبقًا نيابة عنك.

التطبيق / الأصول / أوراق الأنماط / application.css

يحتوي على جميع الأنماط التي سيتم تضمينها في خط أنابيب الأصول. يمكن كتابة الأنماط العامة في Application.css ، ولكن يمكنك أيضًا كتابة أوراق أنماط خاصة بوحدة التحكم (عند تشغيل الأمر rails g  لإنشاء وحدة تحكم جديدة ، فإنها ستنشئ ورقة أنماط مرتبطة.   =require_tree . هي طريقة ريلز لتضمين جميع المجلدات المرتبطة داخل دليل ، لذا سيتم تضمين الملفات الموجودة داخل هذا المشروع عند تجميعها =require_selfستتضمن أي CSS تكتبه داخل ملف Application.css نفسه ، وهذا هو موقع محدد لذلك سيتم تشغيل CSS داخل Application.css / بعد / المجلدات الأخرى التي يتم سحبها بواسطةrequire_tree .

.app / القنوات

ريلز لديها العديد من الأطر الداخلية الأصغر. ActionCable هو إطار عمل يتيح لك استخدام WebSockets لإنشاء ميزات في الوقت الفعلي في تطبيقك مثل الدردشات والتحديث التلقائي "للاشتراكات" للإشعارات والمحتوى الجديد. إذا كنت لا تنوي تنفيذ أي ميزات في الوقت الفعلي ، فلا داعي للقلق بشأن أي مجلدات ActionCable. يحتوي مجلد القنوات على ملفات Ruby من جانب الخادم لإنشاء هذه الاتصالات.

يمكنك قراءة كل شيء عن ActionCable هنا: نظرة عامة على كابل الإجراء - دليل Ruby on Rails

app / قنوات / application_cable

يحتوي Application_cable على ملفات القنوات والاتصال لإنشاء ميزات جديدة في الوقت الفعلي في تطبيقك.

التطبيق / القنوات / application_cable / channel.rb

سيتم تغليف كل ميزات الوقت الفعلي الفردية لتطبيقك في قناة قناة فردية. على سبيل المثال ، يمكن أن تكون ميزة الدردشة الدردشة قناة واحدة. سيكون نظام الإخطار بالمحتوى المنشور حديثًا قناة منفصلة. يحتوي هذا المجلد على جميع قنوات التطبيق الخاص بك.

التطبيق / القنوات / application_cable / connection.rb

الاتصالات هي المصادقة بين المستخدم والخادم. إنهم لا يتعاملون مع أي منطق (هذا ما تفعله القنوات) ، بل يقومون فقط بالتحقق للتأكد من أن المستخدم الحالي مصرح له بالاشتراك في القنوات المختلفة في تطبيقك. في معظم الحالات ، قد يكون هذا بمثابة تحقق بسيط من تسجيل المستخدم للدخول.

التطبيق / وحدات التحكم

الجزء "C" من نمط "MVC" في وحدات تحكم عرض النموذج. أجهزة التحكم مثل الوسيط بين النموذج والمنظر. بناءً على طلب المستخدم ، ستحصل وحدة التحكم على أي بيانات مرتبطة من النموذج وتمريرها إلى العرض الذي يظهر للمستخدم. على سبيل المثال ، إذا كان المستخدم يتنقل إلى المضيف المحلي: صفحة 3000 / منشورات ، فستحدد وحدة التحكم طريقة العرض التي يتم عرضها بالإضافة إلى أي سجلات مرتبطة من النموذج.

التطبيق / وحدات التحكم / المخاوف

المخاوف هي طريقة لتقليص النماذج الخاصة بك ، بدلاً من كتابة قدر كبير من الأساليب القابلة لإعادة الاستخدام في نموذج واحد ، يمكنك طرح هذه الأساليب في المخاوف حيث يمكن إعادة استخدامها بسهولة في وحدات التحكم الخاصة بك.

app / وحدات التحكم / application_controller.rb

أجهزة التحكم هي مجرد فئات روبي ترث من فئة تسمى ActionController. كلما أضفت المزيد من النماذج إلى مشروعك ، سيكون لديك المزيد من وحدات التحكم للتعامل معها. application_controller.rb مطلوب لأي مشروع ريلز لأنه يرث منه ActionController::Baseوجميع المتدربين المستقبليين يرثون منه ، مما يمنحهم وظائف وحدات التحكم.

سترى الكثير من ملفات "application_ [أدخل العنوان النسبي هنا] .rb": application_controller.rb ، application_helper.rb ، application_record.rb. في معظم الحالات ، تمثل هذه طريقة عالمية للتفاعل مع التطبيق ، وسيط يرث من فئة أساسية ثم يتم توريثه بواسطة الفئات المستقبلية أو كليهما. لن أناقش وظائف هذه الملفات في جميع الحالات.

التطبيق / المساعدون

المساعدون هم وسيلة للحفاظ على آرائك مرتبة. يجب أن تهتم طرق العرض ببساطة بعرض المعلومات على هيئة html للمستخدم. إذا وجدت أن ملفات html.erb الخاصة بك تتعثر بسبب الكثير من العمليات الحسابية أو المنطق ، فيجب عليك نقل هذا الرمز إلى طرق مساعدة.

app / helpers / application_helper.rb

يوفر مكانًا لكتابة مساعدين عالميين ، بينما تقوم بإنشاء المزيد من وحدات التحكم ، سيكون لديك المزيد من المساعدين للعمل مع وحدات تحكم وطرق عرض محددة.

التطبيق / جافا سكريبت

يعد هذا المجلد مكانًا مفيدًا لوضع جميع ملفات جافا سكريبت التي تستخدمها في التطبيق الخاص بك ، وسوف يقوم خط أنابيب أصول ريلز بتضمينها من هذا المجلد إلى أي صفحات حيث يتم تطبيقها (يعرف خط أنابيب الأصول المكان الذي تنتمي إليه البرامج النصية لأن الملفات ، عادةً ، تتبع a اصطلاح تسمية وحدة التحكم التي يتم تطبيقها أيضًا).

التطبيق / جافا سكريبت / القنوات

لقد نظرنا بالفعل إلى قنوات ActionCable أعلاه ، لكن هذا المجلد يحتوي على جافا سكريبت خاص من جانب العميل لإنشاء اتصالات WebSocket في الوقت الفعلي.

app / javascript / channels / Consumer.js

المستهلكون هم عملاء اتصال WebSocket ؛ المستخدمين النهائيين المشتركين في القناة. سيربط هذا البرنامج النصي هؤلاء المستهلكين بالقناة من جانب العميل.

app / javascript / channels / index.js

يمكن أن يحتوي التطبيق على قنوات متعددة (دردشة ، تنبيهات ، منشورات جديدة ، إلخ). index.js هو دليل من جانب العميل لجميع القنوات في تطبيقك.

app / javascript / packs / application.js

Webpacker عبارة عن جوهرة روبي تسمح لك باستخدام Webpack ، مُجمع JavaScript في مشروع Rails الخاص بك. إنه يعمل جنبًا إلى جنب مع Asset Pipeline وهو مخصص لأطر JavaScript الكبيرة ، وليس البرامج النصية الصغيرة أو الأصول الأخرى مثل CSS أو الصور (التي يتعامل معها Webpack بشكل عام في مشروع Javascript). ومع ذلك ، فإن Webpacker مرن وهذا هو الإعداد الافتراضي فقط. يمكنك جعل Webpack يتعامل مع الصور وجافا سكريبت أصغر تتخطى تمامًا Asset Pipeline إذا كنت ترغب في ذلك. يمكنك تحديد ذلك في هذا المجلد بطلب أصول مختلفة. الأصول الافتراضية التي يتم تعبئتها هي:

*require("@rails/ujs").start()* *require("turbolinks").start()* *require("@rails/activestorage").start()* *require("channels")* 

التطبيق / الوظائف

الوظائف هي مهام في الخلفية تقوم بتشغيلها بينما يستمر المستخدمون في استخدام التطبيق الخاص بك. في أي وقت يكون لديك عملية ستتضمن الكثير من المعالجة ، بما يكفي لإبطاء تجربة المستخدم بشكل كبير وتسبب "توقف" التطبيق الخاص بك ، يجب عليك إنشاء خلفية المهمة التي ستنفذ المهمة خلف الكواليس مما يسمح للمستخدم بمواصلة استخدام موقعك دون انقطاع

لمزيد من المعلومات حول الوظائف ، انظر: دروس وظائف ريلز النشطة: كيفية استخدام activejob | الكود | عبرcodeship

التطبيق / الأصول / الوظائف / application_job.rb

أنظر فوق.

التطبيق / البريد

يمكنك التفكير في رسائل البريد كوحدات تحكم في رسائل البريد الإلكتروني. يمكنك إنشاء بريد جديد باستخدام Rails generate mailer. سيعطيك هذا ما يعادل نموذجًا ووحدة تحكم لإرسال رسائل البريد الإلكتروني إلى المستخدمين.

app / mailers / application_mailer.rb

أنظر فوق.

التطبيق / النماذج

"M" من MVC ؛ النموذج هو قالب للبيانات المخزنة في قاعدة البيانات الخاصة بك. بشكل عام ، يعتبر أي جدول "نموذجًا". قد تكون النماذج الشائعة   User،   Post  أو   Comment. لاحظ أن هذه الأشياء مفردة وليست جمع ، فهذه إشارة إلى الطبيعة النموذجية للنموذج. هذا على النقيض من أجهزة التحكم ، لماذا حسب الاصطلاح يكون الجمع لأن وحدات التحكم تشير إلى سجلات متعددة.

التطبيق / النماذج / المخاوف

المخاوف هي الوحدات النمطية - يتم استخراج شذرات صغيرة من التعليمات البرمجية القابلة لإعادة الاستخدام عمومًا من النماذج عندما تصبح سمينًا جدًا. يعد مجلد Concerns جزءًا من إطار عمل Rails داخلي يسمى ActiveSupport مما يجعل الوحدات النمطية أسهل قليلاً في الإدارة.

لمزيد من المعلومات ، راجع أدلة ريلز حول المخاوف.

التطبيق / النماذج / application_record.rb

يرث Application_record.rb من ActiveRecord::Baseجميع النماذج اللاحقة في تطبيقك ApplicationRecord، على غرار الطريقة التي تجعل بها Application_controller وظائف ActionControllerالتحكم متاحة لجميع وحدات التحكم الأخرى.

التطبيق / المشاهدات

القطعة الأخيرة من نمط MVC هي Views. يحتوي مجلد المشاهدات على كل ما يراه المستخدم في متصفحه ، غالبًا في شكل HTML مع Ruby (ERB) أو .Haml وهي لغة نموذجية لـ Ruby. من المرجح أن يكون لوحدات التحكم الجديدة مجلد عرض مرتبط بنفس الاسم (إلا إذا كنت تقوم بإنشاء واجهة برمجة تطبيقات). بشكل عام ، سيكون لكل طريقة في وحدة التحكم طريقة عرض مرتبطة.

التطبيق / وجهات النظر / التخطيطات

سيحتوي تطبيق ريلز الجديد على مجلد تخطيطات يحتوي على application.html.erb و mailer.html.erb و mailer.text.erb ، وهي تخطيطات عامة لتطبيق ريلز في مجالات مختلفة مثل المتصفح وصندوق الوارد. قد ترغب في إضافة مكونات أخرى من التخطيط إلى هذا المجلد ، على سبيل المثال ، _header.html.erb ولكن سيتم تنظيم معظم طرق العرض الخاصة بك في مجلدات العرض الخاصة بوحدة التحكم الخاصة بهم. Application.html.erb هو القالب الرئيسي للبرنامج، وهذا ملف يخلق HTML الرئيسية و علامات للتطبيق الخاص بك مع وجهات نظر أنفسهم هو مبين في . العائد هو مجرد جزء صغير من كود Ruby الذي يضيف طريقة العرض المناسبة للصفحة التي ينظر إليها المستخدم. وجوديحتفظ ملف Application.html.erb بالكود الخاص بك جافًا نظرًا لأنه لا يتعين عليك الإعلان بشكل متكرر عن نوع المستند أو عناصر الرأس أو تضمين البرامج النصية وأوراق الأنماط لكل صفحة في العرض. تعتني ريلز وخط أنابيب الأصول بهذا الأمر نيابةً عنك. الملفات الثلاثة في هذا المجلد كما هو مذكور أعلاه هي:

  • app / views / Layouts / application.html.erb
  • app / views / Layouts / mailer.html.erb
  • app / views / Layouts / mailer.text.erb

مجلد بن

يساعد مجلد bin في إعداد تطبيق ريلز بحيث يمكن تشغيله والأوامر المرتبطة به بشكل صحيح.

بن / حزمة

يضمن أن حزمة الأحجار الكريمة تعمل بشكل صحيح.

بن / القضبان

Spring هو أداة التحميل المسبق التي تحافظ على تشغيل ريلز في الخلفية أثناء عملك (هناك بعض الحالات التي تحتاج فيها إلى إعادة تشغيل الخادم ، ولكن بالنسبة للجزء الأكبر ، سيتم تحميل التغييرات على طرق العرض أو وحدات التحكم تلقائيًا وفورًا في تطبيقك قيد التشغيل في التطوير بيئة). يتم تحميل هذا الملف في الربيع عند بدء تشغيل تطبيق ريلز.

بن / أشعل النار

يشير Rake إلى Ruby Make ويستخدم لتشغيل عدة أوامر من شأنها إعداد الخادم وتحديثه.

بن / الإعداد

يتيح لك كتابة أوامر يتم تشغيلها عند بدء تشغيل تطبيقك لأول مرة.

بن / ربيع

يسمح لـ Spring بالعمل دون استخدام Bundler لتجميع كل الأحجار الكريمة الخاصة بك ، وهذا يتيح لفصل الربيع إعادة تحميل صفحاتك قيد التطوير بسرعة كلما قمت بإجراء تغيير.

بن / webpack

كما نوقش أعلاه ، يستخدم ريلز Webpack لتجميع بعض JavaScripts بدلاً من AssetPipeline ، يتطلب هذا الملف الإعداد اللازم ثم يقوم بتشغيل Webpack.

bin / webpack-dev-server

يسمح لك بتخصيص خادم تطوير Webpack الذي قد ترغب في القيام به إذا كنت لا تريد تجميع بعض أو كل أصولك في بيئة التطوير الخاصة بك.

بن / غزل

Yarn هو مدير حزم JavaScript مشابه لـ NPM. يمكنك استخدام إما مع مشاريع ريلز.

التكوين

التكوين ، مثلما يوحي الاسم ، يحتوي على ملفات لإعداد تطبيق ريلز في بيئات مختلفة ؛ التطوير والاختبار.

التكوين / البيئات

يتيح لك هذا المجلد تكوين كيفية عمل التطبيق الخاص بك في بيئات التطوير والإنتاج والاختبار. على سبيل المثال ، قد ترغب في التأكد من تكوين action_mail الخاص بك لإرسال رسائل البريد الإلكتروني من خلال خدمة بريد قيد الإنتاج ولكن ليس قيد التطوير.

التكوين / التهيئة

يتيح لك هذا المجلد تعيين مُهيِّئات دقيقة لتحديد كيفية تشكيل تطبيق ريلز الخاص بك ، وهناك فرصة جيدة لأنك لن تقضي الكثير من الوقت هنا خاصةً عند العمل على تطبيقاتك القليلة الأولى من ريلز.

config / initializers / application_controller_renderer.rb

يسمح لوحدات التحكم بالخروج من نطاقها. لمزيد من المعلومات ، راجع: الترقية إلى Ruby on Rails 5.0 من Rails 4.2 - حالة استخدام التطبيق - التشغيل باستخدام Ruby

config / initializers / الأصول.rb

تتعلق بخط أنابيب الأصول ؛ والتي ستتذكر أنها تقدم صفحات في تطبيق ريلز الخاص بك مع الأصول المحددة (CSS ، JS ، إلخ) التي يحتاجون إليها. هنا ، يمكنك إضافة أصول إلى مسار التحميل مثل node_modules.

config / initializers / backtrace_silencers.rb

Backtraces هي أداة تصحيح أخطاء تتيح لك رؤية ما يحدث في تطبيق Rails الخاص بك ، وهي مفيدة بشكل خاص عندما تنفجر الأشياء ويمكنك تحديد منطقة الفشل المحددة. قم بتكوين ما تظهره backtraces من خلال تحديد المكتبات المسموح لها بإظهار backtraces في هذا الملف.

config / initializers / content_security_policy.rb

من Mozilla: " يسمح رأس استجابة سياسة أمان محتوى HTTP لمسؤولي موقع الويب بالتحكم في الموارد التي يُسمح لوكيل المستخدم بتحميلها لصفحة معينة. مع استثناءات قليلة ، تتضمن السياسات في الغالب تحديد أصول الخادم ونقاط نهاية البرنامج النصي "سياسة أمان المحتوى - HTTP | MDN. في الأساس ، يتحكم هذا في البيانات المسموح لها بالتدفق إلى تطبيقك ومن المصادر الخارجية. على سبيل المثال الارتباط بنصوص خارجية أو خطوط أو صور خارج تطبيقك.

config / initializers / cookies_serializer.rb

يحدد تنسيق ملفات تعريف الارتباط ، بشكل افتراضي :json

config / initializers / filter_parameter_logging.rb

سنناقش التسجيل أدناه ولكن هناك بعض المعلمات (إدخالات المستخدم المقبولة) مثل كلمات المرور أو بيانات المستخدم الحساسة التي لا تريد أن تظهر في السجل الخاص بك ، يمكنك إضافتها هنا. filter_paramiter_logging يشبه نوعًا ما .gitignore للمعلمات.

config / initializers / inflections.rb

كما نوقش في شرح النموذج ، لدى ريلز اصطلاحات تسمية لما هو مفرد وصيغة الجمع. استنادًا إلى الإعدادات المحلية (إعدادات اللغة لتطبيقك ، انظر مجلد Locales أدناه) ، يمكنك تحديث هذه التصريفات في أداة التهيئة هذه على الرغم من أنها قد لا تكون فكرة جيدة إلا إذا كانت ضرورية للغاية.

config / initializers / mime_types.rb

أنواع MIME - تحدد ملحقات بريد الإنترنت متعددة الأغراض تنسيق مرفقات البريد الإلكتروني.

MIME - ويكيبيديا

config / initializers / wrap_parameters.rb

بشكل افتراضي ، يلف ريلز جميع المعلمات في JSON ولكن يمكنك تحديد تنسيقات أخرى باستخدام wrap_parametersالتجزئة. ActionController :: ParamsWrapper

التكوين / لغات

سيتم تحميله عمومًا باستخدام en.yml باعتباره الملف الوحيد. إذا كان التطبيق الخاص بك سيحتوي على خيارات لغة متعددة ، فيمكنك تضمين جميع الترجمات كملفات YML هنا.

config / webpack

Allows you to configure Webpack settings based on the environment. 

config / webpack / development.js

config / webpack / environment.js

config / webpack / production.js

config / webpack / test.js

config / application.rb

سيتم تشغيل ملف boot.rb إذا كنت تستخدم Passenger. يسحب كل الجواهر التي طلبتها في ملف الأحجار الكريمة إلى مشروعك وينشئ فئة Applicationترث منهاRails::Application

config / boot.rb

ينشئ متغير بيئة BUNDLE_GEMFILEمضبوطًا على موقع ملف جوهرة مشروعك ، وهذه هي الطريقة التي ستعرف بها ريلز مكان سحب التبعيات أو الأحجار الكريمة ، والتي يوجد منها حوالي دزينة في تثبيت Rails خارج الصندوق.

config / cable.yml

على غرار database.yml (انظر أدناه) ، يضع cable.yml محولات التطوير والاختبار والإنتاج لـ ActionCable ، والتي ستتذكرها هي طريقة ريلز لتنفيذ ميزات الوقت الفعلي في تطبيقك.

config / documents.yml.enc

تستبدل بيانات الاعتماد .yml secrets.yml كموقع للمفاتيح السرية. هذا الملف مشفر بحيث لا يمكن لأي شخص قراءة مفاتيحك السرية ويتم فك تشفيره فقط بواسطة المفتاح الرئيسي (انظر أدناه).

config / database.yml

يمكنك تعيين قاعدة بيانات افتراضية (لجعل الكود الخاص بك جافًا قليلاً) بالإضافة إلى قواعد بيانات محددة للتطوير والاختبار والإنتاج.

config / environment.rb

تتطلب تهيئة تطبيق ريلز على الخادم الكثير من الخطوات ، اعتمادًا على ما إذا كنت تستخدم rails serverأو قد تكون هذه الخطوات مختلفة قليلاً ولكن بمجرد أن يتم تحميل environment.rb يتم تهيئة التطبيق ويبدأ في التشغيل.

config / master.key

قم برمي هذا في ملف .gitignore الخاص بك على الفور (انظر أدناه) ، هذا هو المفتاح الرئيسي الذي يفك تشفير بيانات الاعتماد .yml.enc في ريلز ويجب ألا يمتلكها أحد. لمزيد من المعلومات ، يمكنك قراءة هذا المقال الرائع: أوراق اعتماد ريلز 5.2 - كودار كود - متوسط

config / puma.rb

Puma هو خادم ويب لـ Ruby وهو خادم الويب الافتراضي لبيئة تطوير Rails. يمكنك تكوين Puma من خلال هذا المجلد مع تغيير أشياء مثل عدد الخيوط والمنفذ الافتراضي الذي سيستمع إليه puma للطلبات الواردة (الافتراضي هو 3000).

config / route.rb

الطرق هي خريطة الطريق حول وحدات التحكم الخاصة بك. تأخذ المسارات الطلبات الواردة إلى الخادم وتوجهها إلى وحدة التحكم الصحيحة. على عكس معظم الملفات الأخرى في مجلد التكوين ، سوف تقضي الكثير من الوقت هنا في إعداد المسارات أثناء إنشاء التطبيق الخاص بك.

config / spring.rb

كما تمت مناقشته في مجلد bin ، يعد Spring أداة تحميل مسبق ، فهذا الملف يخبر Spring بالملفات والمجلدات التي يجب أن تؤدي إلى إعادة التشغيل.

config / storage.yml

ActiveStorage هو إطار عمل تم تقديمه في الإصدار 5.2 من ريلز لتحميل الأصول وتخزينها مثل الصور. أنت بحاجة إلى مكان لوضع تلك الأشياء مثل مثيل AWS ، فأنت تحدد هذا الموقع في هذا الملف.

config / webpacker.yml

يسمح لك بإضافة بيئات إضافية أيضًا Webpacker.

ديسيبل

ديسيبل / البذور

تتيح لك البذور ملء قاعدة بيانات بالبيانات. لنفترض أنك أردت مشاهدة ميزة ترقيم الصفحات أثناء العمل ؛ يمكنك إنشاء 11 منشورًا يدويًا أو يمكنك فقط استخدام جوهرة مثل Faker لإنشاء 11 منشورًا عشوائيًا لك وإدراجها مباشرة في قاعدة البيانات الخاصة بك.

ليب

يتم تعريف Lib بواسطة أدلة Rails على أنه "وحدات نمطية موسعة لتطبيقك". إذا كان هذا يبدو غامضًا ، فأنت لست الوحيد الذي يشعر بهذه الطريقة. ما يدور في المجلد lib على وجه التحديد مثير للجدل إلى حد ما: انظر ماذا يحدث في Rails lib / - Extreme Programming - Medium وما هو الكود الموجود في الدليل / lib؟ لكن الإجماع العام هو أنه يجب حجز lib للرمز الذي لا يتناسب مع مجلد التطبيق ، والذي يمكن استخراجه بسهولة لاستخدامه في التطبيقات الأخرى. لديها اثنين من الأصول والمهام المجلدات الفرعية

ليب / الأصول

من أدلة روبي أون ريلز:

"lib / الأصول مخصصة لرمز مكتباتك التي لا تتناسب حقًا مع نطاق التطبيق أو تلك المكتبات التي تتم مشاركتها عبر التطبيقات."

ليب / المهام

يمكنك كتابة rakeمهام مخصصة ووضعها في هذا المجلد. إنه ليس موقعًا شائع الاستخدام.

سجل

يعد التسجيل طريقة مهمة لمعرفة كيفية أداء التطبيق الخاص بك ولإيجاد المشكلات وإصلاحها. بشكل افتراضي ، سيكون هذا المجلد فارغًا. يمكنك تهيئة العديد من المسجلين في مجلد config / environment بأمر مثل: config.log_level = :infoمن هناك أثناء تشغيل التطبيق الخاص بك ، سيتم إنشاء ملف السجل. لمزيد من المعلومات التفصيلية ، راجع هذه المقالة الرائعة من Datadog: كيفية جمع وتخصيص وإدارة سجلات تطبيق Rails

المدرجة في مجلد السجل:

  • سجل / سجل التنمية

node_modules

ستعتمد أي حزم عقدة تستخدمها في مشروعك (مثل Webpack و Babel) على العشرات إن لم يكن المئات من حزم العقد الأخرى. سيقوم مدير الحزم مثل NPM أو Yarn بإدارة هذه الحزم نيابة عنك. لا يجب عليك الدخول إلى هذا المجلد أو تعديل أي شيء فيه.

عامة

يحتوي المجلد العام على موارد خارجية ويمكن الوصول إليها خارج البنية العادية للتطبيق الخاص بك ، والأيقونة المفضلة ، وأيقونات Apple-touch ، و robots.txt وصفحات أخطاء الدورة التدريبية بالطبع. صفحات مثل: 404 و 422 و 500. إذا واجه التطبيق قيد الإنتاج نوعًا من الخطأ ، فسيتم تقديم صفحات HTML هذه تلقائيًا لتجاوز المسارات أو وحدات التحكم أو أي طرق عرض محددة. هذه الصفحات ليست جزءًا من Rails Asset Pipeline لذا ستحتاج إلى كتابة أي أنماط مضمنة.

عام / ملف robots.txt

يسمح لك بتحديد كيفية زحف محركات البحث إلى موقع الويب الخاص بك.

تخزين

قدم ريلز 5.2 ActiveStorage الذي حل محل الأحجار الكريمة مثل PaperClip ويسمح لريلز بالتفاعل مباشرة مع الخدمات السحابية مثل AWS أو Google

اختبار

ريلز لديها اختبارات مدمجة من الألف إلى الياء! مجموعة الاختبار الافتراضية في ريلز هي MiniTest ، لذا ستجد أن كل هذه المجلدات جاهزة للعمل مع MiniTest.

هناك مجلدات يمكنك من خلالها اختبار وحدات تحكم معينة ومساعدين ونماذج ورسائل بريدية بالإضافة إلى كتابة اختبارات تكامل تعمل عبر وحدات تحكم متعددة وإعادة إنشاء شيء يشبه تجربة المستخدم الفعلية. لمزيد من المعلومات حول ما يشكل اختبار وحدة تحكم مقابل اختبار تكامل ، أوصي بهذه المقالة من (جيسون سويت)

اختبار / القنوات

اختبار / قنوات / application_cable / connection_test.rb

اختبارات اتصالات ActionCable مثل جميع عناصر ActionCable ، لن تحتاجها إلا إذا كنت تستخدم القنوات في تطبيقك.

اختبار / وحدات تحكم

يمكنك اختبار وحدات التحكم الخاصة بك هنا ، تبحث هذه الاختبارات بشكل عام في مدى نجاح وحدة التحكم الخاصة بك بين النموذج والعرض ، فهي أكبر في النطاق ثم اختبارات النموذج ولكنها أصغر في النطاق ثم اختبارات التكامل.

اختبار / تركيبات

ليس مكانًا لكتابة الاختبارات ولكن لتوليد بيانات اختبار وهمية. داخل مجلد التركيبات ، يمكنك إضافة أي عدد من ملفات YML ببيانات محددة مسبقًا. يمكنك سحب هذه البيانات إلى اختباراتك للتأكد من أن النماذج الخاصة بك تعمل بشكل صحيح وتتفاعل مع التطبيق كما هو متوقع.

اختبار / تجهيزات / ملفات

الآن بعد أن أصبح لدى ريلز معالجة ملفات مضمنة مع ActiveStorage ، لا يمكنك فقط اختبار البيانات من النماذج ، بل يمكنك أيضًا اختبار الملفات.

اختبار / مساعدين

يمكنك كتابة اختبارات محددة للمساعدين لديك في التطبيق / المساعدين. مساعدي الاختبار ليس شائعًا جدًا ولكن يمكنك القيام بذلك إذا كان المساعد شديد التعقيد أو يبدو هشًا.

الاختبار / التكامل

تسمح لك اختبارات التكامل باختبار التفاعلات بين وحدات التحكم وتوفر خيار اختبار أقرب إلى تجربة المستخدم الفعلية.

اختبار / مراسلات

يمكنك حتى كتابة اختبارات لرسائل البريد الخاصة بك ، للتأكد من إرسال رسائل البريد الإلكتروني بشكل صحيح ومنسقها بشكل صحيح.

اختبار / نماذج

أحد أكثر الاختبارات دقة ؛ يمكنك التأكد من حفظ السجل بشكل صحيح ، وتحديث قاعدة البيانات ، وما إلى ذلك.

نظام اختبار

اختبارات النظام هي طريقة لاختبار تطبيقك في متصفح حقيقي ينتج عنه لقطات شاشة لتظهر لك كيف يبدو كل شيء في العمل. ستختبر اختبارات النظام أيضًا JavaScript ، وليس أنه يجب عليك استخدام اختبارات نظام MiniTest كبديل لمكتبة اختبار JavaScript جيدة مثل Jest. اختبارات النظام ومع ذلك ، سيسمح لك بمعرفة كيفية عمل JavaScript في المتصفح.

اختبار / application_system_test_case.rb

يحتوي هذا الملف على الإعدادات الافتراضية لاختبارات نظامك ، ويمكنك تغيير المتصفحات أو برامج التشغيل أو دقة الشاشة.

اختبار / test_helper.rb

يجلب مساعد الاختبار البيانات والمكتبات الخارجية المطلوبة للاختبارات. ستلاحظ أنه fixtures :allتم استيراد الخفافيش مباشرة . هذا يتيح لاختباراتك الوصول إلى التركيبات. يمكنك إعداد مجموعة من مجموعات وأطر الاختبار الأخرى من test_helper.rb لتضمين وظائفها و DSLs مثل Capybara و FactoryBot و Faker.

tmp

مؤقت - يحتوي هذا المجلد على ذاكرة تخزين مؤقت وجلسات يمكن مسحها في بعض الأحيان إما يدويًا أو عند النشر (اعتمادًا على كيفية نشر تطبيقك)

بائع

مجلد البائع هو مكان لرمز طرف ثالث يشبه إلى حد ما الأحجار الكريمة. الأحجار الكريمة. ومع ذلك ، فهي قائمة بذاتها قليلاً بينما قد يحتوي مجلد البائع على برامج نصية محددة غير مجمعة كأحجار كريمة. لمزيد من المعلومات حول هذا بالإضافة إلى بعض الفوائد ، راجع كيفية بيع الأحجار الكريمة.

.browserslistrc

Browserslist هي أداة لاستهداف إصدارات معينة من المتصفح لأدوات NPM مثل Babel. تعيين إلى "الافتراضي" بشكل افتراضي ، يضمن ذلك

.gitignore

كما هو الحال مع أي مشروع آخر ، سيتجاهل التحكم في الإصدار أي ملفات أو مجلدات تحددها هنا.

.ruby-version

يحتوي ببساطة على إصدار Ruby الذي يعمل المشروع ضمنه ، ويمكن لـ RVM قراءة هذا الملف وتعيين الإصدار الصحيح من Ruby على جهاز الكمبيوتر الخاص بك (إذا كان لديك إصدارات متعددة من Ruby مثبتة).

babel.config.js

Babel هو مترجم جافا سكريبت يتيح لك استخدام أحدث وأفضل ميزات JavaScript ويجمعها لتكون متوافقة مع متصفحات الويب التي ربما لم تعتمد هذه الميزات بعد. لمزيد من المعلومات حول تكوين Babel ، راجع مستنداتهم الرسمية.

config.ru

يستخدم Rack (خادم Ruby الشهير) هذا الملف لبدء التطبيق.

gemfile

داخل ملف gemfile ، تقوم بتخزين جميع تبعيات التطبيق الخاص بك ، كما رأيت أن الأمر Rails New يقوم بتثبيت الكثير من الجواهر ولكن مع إضافة المزيد من الوظائف إلى التطبيق الخاص بك ، فسوف تقوم بالتنقل داخل وخارج هذا الملف كثيرًا.

gemfile.lock

على غرار package-lock.json لمشاريع Node ، يتم تحديث هذا الملف عند تشغيل bundle installأو bundle updateحل جميع تبعيات الأحجار الكريمة فوق ما قمت بتضمينه يدويًا في ملف الأحجار الكريمة. لا تعبث بهذا الملف ، يتم تحديثه تلقائيًا.

package.json

ينشئ تبعيات NPM لوحدات Javascript ، وسيتم تعبئتها مع Webpacker.

postscss.config.js

تمنحك PostCSS الكثير من الوظائف الحديثة باستخدام CSS ، بدءًا من إضافة بادئات البائع تلقائيًا إلى تضمين وحدات CSS النمطية. لمعرفة المزيد عن هذه الأداة الرائعة ، تحقق منها.

rakefile

مرة أخرى Rake تعني "Ruby Make". يحتوي ريلز على العديد من الأوامر المضمنة التي تتطلب Rake مثل rake routes(عرض جميع المسارات للتطبيق الخاص بك) rake db:migrateلإضافة نماذج وأعمدة جديدة إلى db الخاص بك. من بين أمور أخرى ، يمكنك إضافة أوامر أشعل النار مخصصة هنا.

README.md

هذا هو الملف التمهيدي لمشروعك ، وسيتم عرضه في صفحة Github الخاصة بمشاريعك ، مع تضمين أي معلومات تعتقد أنها ستكون مفيدة للآخرين الذين يحققون في مشروعك أو يعملون معه.

الغزل

يشبه إلى حد كبير package.json ، Yarn هو مدير الحزم الافتراضي Webpacker. هذا ملف قفل ، لذا مثل Gemfile.lock سيتم تحديثه تلقائيًا ويجب ألا تغيره يدويًا.

لقد نجحت! تهانينا!

عبر GIPHY

مصادر إضافية

المساعدون (دليل المبتدئين لمساعدي السكك الحديدية - Mix & Go)

معلومات حول الاحتفاظ بالملفات (StackOverflow الاحتفاظ بالملفات)

تهيئة القضبان (عملية تهيئة القضبان - أدلة Ruby on Rails)

إنشاء تطبيق المدونة (الشروع في استخدام ريلز - أدلة روبي أون ريلز)

أدرك أن هذا أمر ساحق جدًا ولكن دعني أبسطه قليلاً. 99٪ من ريلز موجود للسماح لك بتخصيص مشروعك إلى الدرجة n وهذا هو سبب استمرار ريلز في العمل بشكل جيد للمؤسسات الكبيرة والشركات الناشئة على حد سواء ؛ يمكنك بسهولة ضبط وتعديل أي جزء من تطبيقك تقريبًا بجهد قليل جدًا. ومع ذلك ، بالنسبة لمعظم المبتدئين والمشاريع الشخصية وحتى كمية مناسبة من مشاريع الشركات ، ستستخدم القليل جدًا من هذه الوظيفة.

نظرًا لأن Models و Views و Controllers تمثل جوهر تطبيق Rails ، فسوف تقضي معظم وقت التطوير في مجلد التطبيق. ستستخدم ملف route.rb قدرًا معقولاً في مجلد التكوين بينما تقوم بإعداد كيفية قيام المستخدمين بالمرور عبر تطبيقك وعند إضافة إجراءات تحكم جديدة. تأكد دائمًا من كتابة تغطية اختبار مناسبة لتطبيقاتك. إذا كنت كذلك ، فسوف تقضي الكثير من الوقت في مجلد الاختبار. يعد ملف الأحجار الكريمة مكانًا أخيرًا ستزوره غالبًا لإضافة وتحديث الأحجار الكريمة حسب الحاجة.

على الرغم من وجود عدد كبير من الملفات والمجلدات التي تم إنشاؤها في كل جديد ، إلا rails newأنه لا يجب أن تربكها ؛ إذا فقدت هذا المنشور في أي وقت مضى.