سطر أوامر ريلز

من موسوعة حسوب

بعد قراءة هذا الدّليل، ستتمكّن من:

  • إنشاء تطبيق ريلز.
  • توليد النماذج، ووحدات التحكّم، وتهجيرات قاعدة البيانات (database migrations)، ووحدات الاختبار.
  • بدء الخادم الإنتاجي.
  • كيفية تجربة الكائنات من خلال صدفة تفاعليّة (interactive shell)

يفترض هذا الدليل أن لديك معرفة أساسية بإطار العمل ريلز من قراءة دليل البدء مع ريلز.

أساسيات سطر الأوامر

هناك بضعة أوامر تُعتبر حاسمة للغاية لاستخدامك اليومي لإطار العمل ريلز. هذا الأوامر مرتّبة حسب كثرة استخدامها تقريبًا بالشكل التالي:

  • rails console
  • rails server
  • bin/rails
  • rails generate
  • rails dbconsole
  • rails new app_name

يمكن تشغيل كافة الأوامر مع h- أو help-- لعرض مزيد من المعلومات عنها.

دعنا نُنشئ تطبيق ريلز بسيط لتجريب كل من هذه الأوامر في سياقها المناسب.

rails new

أول شيء نريد فعله هو إنشاء تطبيق ريلز جديد عن طريق تنفيذ الأمر rails new بعد تثبيت ريلز.

يمكنك تثبيت الجوهرة rails بكتابة الأمر gem install rails إن لم تمتلكها بالفعل.

$ rails new commandsapp
     create
     create  README.md
     create  Rakefile
     create  config.ru
     create  .gitignore
     create  Gemfile
     create  app
     ...
     create  tmp/cache
     ...
        run  bundle install

ستُزوّدك ريلز بما يبدو بمقدار كبير من المعلومات حتى بالنسبة لأمر بهذا الصغر! لديك بنية المجلّد Rails كاملة الآن مع كامل التعليمات البرمجيّة التي تحتاجها لتشغيل تطبيقنا البسيط لدينا مباشرة.

rails server

يشغِّل الأمر rails server خادم ويب يسمّى Puma والذي يأتي مع ريلز. ستستخدمه وقتما تريد الوصول إلى تطبيقك عبر مُتصفّح ويب.

سيُشغّل الأمر rails server تطبيق ريلز الجديد بدون أي عمل إضافي:

$ cd commandsapp
$ bin/rails server
=> Booting Puma
=> Rails 5.1.0 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.0.2 (ruby 2.3.0-p0), codename: Plethora of Penguin Pinatas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop

بثلاثة أوامر فقط، صنعنا خادم ريلز يستمع على المنفذ 3000. انتقل إلى متصفّحك وافتح http://localhost:3000 سترى تطبيق Rails بسيط قيد التشغيل.

يمكنك أيضًا استخدام الاسم البديل "s" لبدء تشغيل الخادم بالشكل: rails s.

يمكن تشغيل الخادم على منفذ مُختلف باستخدام الخيار p-. يمكن تغيير بيئة التطوير الافتراضية باستخدام e-.

$ bin/rails server -e production -p 4000

يربط الخيار b- إطار العمل ريلز بالعنوان IP المحدّد الذي يكون افتراضيًا localhost. يمكنك تشغيل الخادم كعفريت (daemon) بتمرير الخيار d-.

rails generate

يستخدم الأمر rails generate قوالب لإنشاء أشياء كثيرة. تشغيل rails generate نفسه يعطي قائمة من المُوّلدات المتاحة:

ملاحظة: يمكنك أيضًا استخدام الاسم البديل "g" لاستدعاء الأمر المُولّد بالشكل: rails g.

$ bin/rails generate
Usage: rails generate GENERATOR [args] [options]
 
...
...
 
Please choose a generator below.
 
Rails:
  assets
  channel
  controller
  generator
  ...
  ...

ملاحظة: يمكنك تثبيت المزيد من المولّدات عبر الجواهر المُولّدة، وأجزاء من الإضافات (plugins) التي ستُثبّتها دون شك ويمكنك حتى إنشاء مولّداتك شخصيَّا!

سيوفّر استخدام المولدات عليك كثيرًا الوقت عبر كتابة الشيفرة المُتداولة (boilerplate code)، وهي شيفرة ضروريّة كي يعمل التطبيق.

فلنصنع وحدة تحكّم خاصة بنا بمولّد وحدات تحكّم. لكن ما الأمر الذي يجب أن نستخدمه؟ فلنسأل المُولّد:

ملاحظة: تحتوي كافّة أدوات الطرفيّة المساعدة (console utilities) في ريلز على نص مساعدة. يمكنك محاولة إضافة help-- أو h- إلى نهاية الأمر كما هو الحال مع معظم الأدوات المساعدة nix*، على سبيل المثال rails server --help.

$ bin/rails generate controller
Usage: rails generate controller NAME [action action] [options]
 
...
...
 
Description:
    ...
 
    To create a controller within a module, specify the controller name as a path like 'parent_module/controller_name'.
 
    ...
 
Example:
    `rails generate controller CreditCards open debit credit close`
 
    Credit card controller with URLs like /credit_cards/debit.
        Controller: app/controllers/credit_cards_controller.rb
        Test:       test/controllers/credit_cards_controller_test.rb
        Views:      app/views/credit_cards/debit.html.erb [...]
        Helper:     app/helpers/credit_cards_helper.rb

يتوقع مُولّد وحدة التحكّم المعاملات في شكل generate controller ControllerName action1 action2. فلننشئ وحدة تحكّم Greetings مع إجراء (action) سنسمّيه hello، والذي سيقول لنا أشياءً لطيفة.

$ bin/rails generate controller Greetings hello
     create  app/controllers/greetings_controller.rb
      route  get "greetings/hello"
     invoke  erb
     create    app/views/greetings
     create    app/views/greetings/hello.html.erb
     invoke  test_unit
     create    test/controllers/greetings_controller_test.rb
     invoke  helper
     create    app/helpers/greetings_helper.rb
     invoke  assets
     invoke    coffee
     create      app/assets/javascripts/greetings.coffee
     invoke    scss
     create      app/assets/stylesheets/greetings.scss

ما الذي ولّده كل هذا؟ تأكد من وجود مجموعة من المجلّدات في تطبيقنا، وإنشاء ملف وحدة تحكّم، وملف واجهة، وملف اختبار وظيفي، ومساعد للواجهة، وملف JavaScript وملف ورقة أنماط (stylesheet). تحقّق من وحدة التحكّم وعدّلها قليلًا (في app/controllers/greetings_controller.rb):

class GreetingsController < ApplicationController
  def hello
    @message = "Hello, how are you today?"
  end
end

ثم الواجهة لعرض رسالتنا (في app/views/greetings/hello.html.erb):

<h1>A Greeting for You!</h1>
<p><%= @message %></p>

أطلق خادمك باستخدام rails server:

$ bin/rails server
=> Booting Puma...

سيكون العنوان هو http://localhost:3000/greetings/hello.

باستخدام تطبيق ريلز عادي قديم، ستتبع عناوينك URL بشكل عام النمط http://(host)/(controller)/(action)‎، وسيُشغّل عنوان URL مثل http://(host)/(controller)‎ الإجراء index من وحدة التحكّم تلك.

تأتي ريلز مع مُولّد لنماذج البيانات أيضا.

$ bin/rails generate model
Usage:
  rails generate model NAME [field[:type][:index] field[:type][:index]] [options]
 
...
 
Active Record options:
      [--migration]            # Indicates when to generate migration
                               # Default: true
 
...
 
Description:
    Create rails files for model generator.

ارجع إلى توثيق الواجهة البرمجيّة للتابع add_column للوحدة SchemaStatements للحصول على قائمة بأنواع الحقول المتاحة لمعامل type. ينشئ المعامل index فهرسًا (index) مقابلًا للعمود.

ولكن بدلًا من توليد نموذج مباشرة (وهو ما سنفعله لاحقًا)، فلننشئ سقالة (scaffold). السقالة في ريلز هي مجموعة كاملة من النماذج، وتهجير قاعدة البيانات لهذا النموذج، ووحدة تحكّم للتلاعب بها، توابع واجهة لعرض البيانات ومعالجتها، ومجموعة اختبار لكل ما سبق.

سننشئ موردًا بسيطًا يسمى "HighScore" والذي سيتابع أعلى درجاتنا في ألعاب الفيديو التي نلعبها:

$ bin/rails generate scaffold HighScore game:string score:integer
    invoke  active_record
    create    db/migrate/20130717151933_create_high_scores.rb
    create    app/models/high_score.rb
    invoke    test_unit
    create      test/models/high_score_test.rb
    create      test/fixtures/high_scores.yml
    invoke  resource_route
     route    resources :high_scores
    invoke  scaffold_controller
    create    app/controllers/high_scores_controller.rb
    invoke    erb
    create      app/views/high_scores
    create      app/views/high_scores/index.html.erb
    create      app/views/high_scores/edit.html.erb
    create      app/views/high_scores/show.html.erb
    create      app/views/high_scores/new.html.erb
    create      app/views/high_scores/_form.html.erb
    invoke    test_unit
    create      test/controllers/high_scores_controller_test.rb
    invoke    helper
    create      app/helpers/high_scores_helper.rb
    invoke    jbuilder
    create      app/views/high_scores/index.json.jbuilder
    create      app/views/high_scores/show.json.jbuilder
    invoke  test_unit
    create    test/system/high_scores_test.rb
    invoke  assets
    invoke    coffee
    create      app/assets/javascripts/high_scores.coffee
    invoke    scss
    create      app/assets/stylesheets/high_scores.scss
    invoke  scss
   identical    app/assets/stylesheets/scaffolds.scss

يتطلّب التهجير  (migration) تشغيل بعض التعليمات البرمجية في روبي (الموجودة في 20130717151933_create_high_scores.rb) لتعديل مخطّط قاعدة بياناتنا. أية قاعدة بيانات؟ قاعدة البيانات SQLite3 التي ستنشئها ريلز لك عند تنفيذ الأمر bin/rails db:migrate. سنتحدث أكثر عن bin/rails بتعّمق بعد حين.

$ bin/rails db:migrate
==  CreateHighScores: migrating ===============================================
-- create_table(:high_scores)
   -> 0.0017s
==  CreateHighScores: migrated (0.0019s) ======================================

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

$ bin/rails server

انتقل إلى المتصفّح وافتح الصفحة ذات الرابط http://localhost:3000/high_scores، والآن يمكننا إنشاء درجات عالية جديدة (55،160 على Space Invaders!)

rails console

يتيح لك الأمر console التفاعل مع تطبيقك من سطر الأوامر. الجانب السلبي هو أنّ rails console يستخدم IRB، لذلك إن استخدمته من قبل، فستجد نفسك مرتاحًا. هذا مفيد لاختبار الأفكار السريعة مع الشيفرات وتغيير البيانات من جانب خادم دون لمس موقع الويب.

يمكنك أيضًا استخدام الاسم البديل "c" لاستدعاء الطرفيّة بالشكل: rails c.

يمكنك تحديد البيئة التي يجب أن يعمل فيها الأمر console.

$ bin/rails console -e staging

تستطيع إن أردت اختبار بعض الشفرات دون تغيير أي بيانات عبر استدعاء rails console --sandbox.

$ bin/rails console --sandbox
Loading development environment in sandbox (Rails 5.1.0)
Any modifications you make will be rolled back on exit
irb(main):001:0>

التطبيق والكائنات المساعدة

داخل rails console، لديك حق الوصول إلى النُسخ app  و helper.

باستخدام التابع app يمكنك الوصول إلى مساعدي url والمسار إضافةً إلى الطلبات.

>> app.root_path
=> "/"
 
>> app.get _
Started GET "/" for 127.0.0.1 at 2014-06-19 10:41:57 -0300
...

مع التابع helper، من الممكن الوصول إلى Rails ومساعدي تطبيقك.

>> helper.time_ago_in_words 30.days.ago
=> "about 1 month"
 
>> helper.my_custom_helper
=> "my custom helper"

rails dbconsole

يكتشف الأمر rails dbconsole أي قاعدة البيانات تستخدمها ويضعك بواجهة سطر الأوامر التي ستستخدمها معها (ويكتشف معاملات سطر الأوامر التي يجب إعطائها أيضًا!). ويدعم MySQL (بما في ذلك MariaDB)، و PostgreSQL و SQLite3.

يمكنك أيضًا استخدام الاسم البديل "db" لاستدعاء الأمر dbconsole بالشكل: rails db.

rails runner

يُشغّل الأمر runner شيفرات روبي في سياق ريلز بشكل غير تفاعلي (non-interactively). على سبيل المثال:

$ bin/rails runner "Model.long_running_method"

يمكنك أيضًا استخدام الاسم البديل "r" لاستدعاء الأمر runner بالشكل: rails r. يمكنك تحديد البيئة التي يجب أن يعمل الأمر runner ضمنها باستخدام المُبدّل e-.

$ bin/rails runner -e staging "Model.long_running_method"

يمكنك حتى تنفيذ شفرات روبي مكتوبة في ملف مع الأمر runner.

$ bin/rails runner lib/code_to_be_run.rb

rails destroy

فكّر في الأمر destroy كنقيض للأمر generate. سيكتشف ما فعله الأمر generate ثم سيلغيه.

يمكنك أيضًا استخدام الاسم البديل "d" لاستدعاء أمر التدمير بالشكل: rails d.

$ bin/rails generate model Oops
      invoke  active_record
      create    db/migrate/20120528062523_create_oops.rb
      create    app/models/oops.rb
      invoke    test_unit
      create      test/models/oops_test.rb
      create      test/fixtures/oops.yml
$ bin/rails destroy model Oops
      invoke  active_record
      remove    db/migrate/20120528062523_create_oops.rb
      remove    app/models/oops.rb
      invoke    test_unit
      remove      test/models/oops_test.rb
      remove      test/fixtures/oops.yml

bin/rails

bin/rails هو الإعداد الافتراضي الجديد لتشغيل الأوامر نظرًا لأنَّ الإصدار 5.0 وما بعده من ريلز يحتوي على أوامر rake مضمّنة في ملف ريلز التنفيذي.

يمكنك الحصول على قائمة بمهام bin/rails المتاحة لك، والتي غالبًا ما تعتمد على مجلّدك الحالي، عبر كتابة الأمر bin/rails --help . تحتوي كل مهمّة على وصف ويجب أن تساعدك في إيجاد ما تحتاجه.

$ bin/rails --help
Usage: rails COMMAND [ARGS]
 
The most common rails commands are:
generate    Generate new code (short-cut alias: "g")
console     Start the Rails console (short-cut alias: "c")
server      Start the Rails server (short-cut alias: "s")
...
 
All commands can be run with -h (or --help) for more information.
 
In addition to those commands, there are:
about                               List versions of all Rails ...
assets:clean[keep]                  Remove old compiled assets
assets:clobber                      Remove compiled assets
assets:environment                  Load asset compile environment
assets:precompile                   Compile all the assets ...
...
db:fixtures:load                    Loads fixtures into the ...
db:migrate                          Migrate the database ...
db:migrate:status                   Display status of migrations
db:rollback                         Rolls the schema back to ...
db:schema:cache:clear               Clears a db/schema_cache.yml file
db:schema:cache:dump                Creates a db/schema_cache.yml file
db:schema:dump                      Creates a db/schema.rb file ...
db:schema:load                      Loads a schema.rb file ...
db:seed                             Loads the seed data ...
db:structure:dump                   Dumps the database structure ...
db:structure:load                   Recreates the databases ...
db:version                          Retrieves the current schema ...
...
restart                             Restart app by touching ...
tmp:create                          Creates tmp directories ...

يمكنك أيضًا استخدام bin/rails -T للحصول على قائمة المهام.

about

يعطي bin/rails about معلومات حول أرقام إصدارات روبي، و RubyGems، وريلز، ومكوّنات ريلز الفرعية، ومجلد تطبيقك، واسم بيئة ريلز الحاليّة، ومحوّل قاعدة بيانات تطبيقك، وإصدار المخطّط (schema version). يفيد ذلك عندما تحتاج لطلب المساعدة أو التحقّق من إحتمال تأثير رقعة أمان (security patch) عليك، أو عندما تحتاج إلى بعض الإحصائيات لتثبيت قائم بالفعل.

$ bin/rails about
About your application's environment
Rails version             5.1.0
Ruby version              2.2.2 (x86_64-linux)
RubyGems version          2.4.6
Rack version              2.0.1
JavaScript Runtime        Node.js (V8)
Middleware:               Rack::Sendfile, ActionDispatch::Static, ActionDispatch::Executor, ActiveSupport::Cache::Strategy::LocalCache::Middleware, Rack::Runtime, Rack::MethodOverride, ActionDispatch::RequestId, ActionDispatch::RemoteIp, Sprockets::Rails::QuietAssets, Rails::Rack::Logger, ActionDispatch::ShowExceptions, WebConsole::Middleware, ActionDispatch::DebugExceptions, ActionDispatch::Reloader, ActionDispatch::Callbacks, ActiveRecord::Migration::CheckPending, ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, ActionDispatch::Flash, Rack::Head, Rack::ConditionalGet, Rack::ETag
Application root          /home/foobar/commandsapp
Environment               development
Database adapter          sqlite3
Database schema version   20110805173523

assets

يمكنك إجراء تحويل مسبق (precompile) للأصول في app/assets باستخدام bin/rails assets:precompile، وإزالة الأصول المُحوّلة (compiled) القديمة باستخدام أصول bin/rails assets:clean. تسمح المهمّة assets:clean بعكس عملية النشر (deploys) التي قد تزال مرتبطة بأصل قديم بينما تُبنى الأصول الجديدة.

تستطيع استخدام bin/rails assets:clobber إن أردت مسح public/assets تمامًا.

db

المهمّتان الأكثر شيوعًا من مجال الاسم db: bin/rails هما migrate و create، وستؤتي تجربة كل مهام التهجير bin/rails ثمارها (up, down, redo, reset) . يفيدنا bin/rails db:version عند استكشاف الأخطاء وإصلاحها ويُعلمك بالإصدار الحالي لقاعدة البيانات.

لمزيد من المعلومات حول عمليات التهجير أنظر دليل التهجير.

notes

ستبحث bin/rails notes داخل شيفرتك عن التعليقات التي تبدأ بـ FIXME أو OPTIMIZE أو TODO. يُبحَثُ في الملفات ذات الامتداد builder. و rb. و rake. و yml. و yaml. و ruby. و css. و js. و erb. لكل من التعليقات التوضيحيّة الافتراضيّة والمخصصّة.

$ bin/rails notes
(in /home/foobar/commandsapp)
app/controllers/admin/users_controller.rb:
  * [ 20] [TODO] any other way to do this?
  * [132] [FIXME] high priority for next deploy
 
app/models/school.rb:
  * [ 13] [OPTIMIZE] refactor this code to make it faster
  * [ 17] [FIXME]

يمكنك إضافة دعم لإمتدادات ملفات جديدة باستخدام الخيار config.annotations.register_extensions الذي يتلقى قائمة بالامتدادات مع التعبير النمطي (regex) المناسب لها لمطابقتهما.

config.annotations.register_extensions("scss", "sass", "less") { |annotation| /\/\/\s*(#{annotation}):?\s*(.*)$/ }

تستطيع إن كنت تبحث عن تعليق توضيحي محدّد مثل FIXME، استخدام bin/rails notes:fixme. لاحظ أنَّ عليك تصغير أحرف اسم التعليق التوضيحي.

$ bin/rails notes:fixme
(in /home/foobar/commandsapp)
app/controllers/admin/users_controller.rb:
  * [132] high priority for next deploy
 
app/models/school.rb:
  * [ 17]

يمكنك أيضًا استخدام تعليقات توضيحيّة مخصصّة في شفرتك وإدراجها باستخدام bin/rails notes:custom عبر تحديد التعليق التوضيحي باستخدام متغير البيئة ANNOTATION.

$ bin/rails notes:custom ANNOTATION=BUG
(in /home/foobar/commandsapp)
app/models/article.rb:
  * [ 23] Have to fix this one before pushing!

لا يُعرَض اسم التعليق التوضيحي (FIXME و BUG وما إلى ذلك) في خطوط الإخراج (output lines) عند استخدام التعليقات التوضيحية والتعليقات التوضيحية المخصصّة. سينظر rails notes افتراضيًّا في مجلّدات app config و db و lib test. إن أردت البحث في مجلّدات أخرى، تستطيع إعدادها باستخدام الخيار config.annotations.register_directories.

config.annotations.register_directories("spec", "vendor")

يمكنك أيضًا تقديمها كقائمة مفصولة بفواصل في متغيّر البيئة SOURCE_ANNOTATION_DIRECTORIES.

$ export SOURCE_ANNOTATION_DIRECTORIES='spec,vendor'
$ bin/rails notes
(in /home/foobar/commandsapp)
app/models/user.rb:
  * [ 35] [FIXME] User should have a subscription at this point
spec/models/user_spec.rb:
  * [122] [TODO] Verify the user that has a subscription works

routes

سيسرد الأمر rails routes قائمة بجميع مساراتك المحدّدة والتي تفيد في تتبع مشكلات التوجيه في تطبيقك أو تقدّم لك نظرة عامة جيّدة على عناوين URL في تطبيق تحاول التعرّف عليه.

test

يرد وصف جيّد لاختبار الوحدة في ريلز في دليل اختبار تطبيقات ريلز.

تأتي ريلز مع جناح اختبار يسمى Minitest. ريلز تدين باستقرارها لاستخدام الاختبارات. تُساعد المهام المتوفّرة في مجال الاسم :test  في تشغيل الاختبارات المختلفة التي نأمل أن تكتبها.

tmp

المُجلّد Rails.root/tmp - الذي يشابه المُجلّد nix /tmp* - هو مكان الاحتجاز للملفات المؤقتة مثل ملفات هوية العمليّة والإجراءات المخزنة مؤقتًا.

تساعدك مهام مجال الاسم :tmp في مسح وإنشاء المجلّد Rails.root/tmp:

  • rails tmp:cache:clear clears tmp/cache.
  • rails tmp:sockets:clear clears tmp/sockets.
  • rails tmp:screenshots:clear clears tmp/screenshots.
  • rails tmp:clear clears all cache, sockets and screenshot files.
  • rails tmp:create creates tmp directories for cache, sockets and pids.

منوّعات

  • rails stats ممتازة للنظر في الإحصاءات بشفرتك، عرض أشياء مثل KLOCs (آلاف الأسطر من الشيفرات البرمجية) ونسبة شيفراتك مقابل الإختبارات.
  • سيمنحك rails secret مفتاحًا عشوائيًا لاستخدامه في جلستك السريّة.
  • يعطي rails time:zones:all قائمة بجميع المناطق الزمنيّة التي تعرفها ريلز.

مهمّات rake المخصّصة

تملك مهام rake المخصّصة الامتداد rake. وتوجد في Rails.root/lib/tasks. يمكنك إنشاء هذه المهام rake المخصّصة باستخدام الأمر bin/rails generate task.

desc "I am short, but comprehensive description for my cool task"
task task_name: [:prerequisite_task, :another_task_we_depend_on] do
  # All your magic here
  # Any valid Ruby code is allowed
end

لتمرير الوسائط (arguments) لمهمتك rake المخصّصة:

task :task_name, [:arg_1] => [:prerequisite_1, :prerequisite_2] do |task, args|
  argument_1 = args.arg_1
end

يمكنك تجميع المهام عن طريق وضعها في مجالات أسماء:

namespace :db do
  desc "This task does nothing"
  task :nothing do
    # Seriously, nothing
  end
end

سيبدو استدعاء المهام كما يلي:

$ bin/rails task_name
$ bin/rails "task_name[value 1]" # entire argument string should be quoted
$ bin/rails db:nothing

على مُهمّتك الاعتماد على المهمة environment التي تُحمّل رمز تطبيقك إن احتجت للتفاعل مع نماذج تطبيقاتك وإجراء استعلامات لقاعدة البيانات وما إلى ذلك.

سطر الأوامر المتقّدم في ريلز

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

ريلز مع قواعد البيانات و SCM

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

فلنلق نظرة على ما يوفّره الخيار git-- والخيار database=postgresql-- لنا:

$ mkdir gitapp
$ cd gitapp
$ git init
Initialized empty Git repository in .git/
$ rails new . --git --database=postgresql
      exists
      create  app/controllers
      create  app/helpers
...
...
      create  tmp/cache
      create  tmp/pids
      create  Rakefile
add 'Rakefile'
      create  README.md
add 'README.md'
      create  app/controllers/application_controller.rb
add 'app/controllers/application_controller.rb'
      create  app/helpers/application_helper.rb
...
      create  log/test.log
add 'log/test.log'

كان علينا إنشاء المجلّد gitapp وتهيئة مستودع git فارغ قبل أن تضيف ريلز الملفات التي أنشأها لمستودعنا. فلنرى ما وضعه في إعداد قاعدة بياناتنا:

$ cat config/database.yml
# PostgreSQL. Versions 9.1 and up are supported.
#
# Install the pg driver:
#   gem install pg
# On OS X with Homebrew:
#   gem install pg -- --with-pg-config=/usr/local/bin/pg_config
# On OS X with MacPorts:
#   gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
#   gem install pg
#       Choose the win32 build.
#       Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem 'pg'
#
default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
 
development:
  <<: *default
  database: gitapp_development
...
...

كما أنه ولّد بعض الأسطر في إعدادنا database.yml المقابل لاختيار PostgreSQL لقاعدة البيانات.

المشكلة الوحيدة في استخدام خيارات SCM هو أن عليك أن إنشاء مجلّد تطبيقك أولاً ثم تهيئة SCM لاحقًا، ثم يمكنك تشغيل الأمر rails new لإنشاء أساس تطبيقك.

مصادر