سطر أوامر ريلز
بعد قراءة هذا الدّليل، ستتمكّن من:
- إنشاء تطبيق ريلز.
- توليد النماذج، ووحدات التحكّم، وتهجيرات قاعدة البيانات (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
لإنشاء أساس تطبيقك.