۱۳۸۶ بهمن ۵, جمعه

آموزش Ruby on Rails


Active Record
Active record ، همان لایه ORM (Object Relational Mapping) بوده که توسط Rails تولید میشود و از مدل استاندارد ORM پیروی می کند: جداول را به کلاس ها،رکوردها را به object ها و فیلدها را به خواص objectها مربوط می کند. Active recordبا بیشتر کتابخانه های ORM که به روش های خاص تنظیم می شوند تفاوت می کند. با استناد به قراردادها و پیش فرض های موجود،Active Record کاری که توسعه دهنده برای ایجاد و تنظیمORM انجام می دهد را به حداقل می رساند. برای نشان دادن این موضوع در اینجا برنامه ای وجود دارد که ازActive Record برای ارتباط با جدول orders استفاده میکند(wrapping):

Require ‘active – record’
Class Orderend
Order = Order.Find (1)
Order.discount = 0.5
Order.save

این کد از هر کلاس Order برای واکشی کردن یک سفارش با شماره شناسه 1)) استفاده نموده و همچنین مقدار discount را تغییر می دهد. (ما کدهای ارتباط با پایگاه را حذف کردیم). Active Record، ما را از برخورد با کدهای سطح پایین برای ارتباط با پایگاه داده نجات می دهد و ما می توانیم روی بخش های اصلی نرم افزار تمرکز نماییم. اما Active Record بیشتر از آن چیزی که در ظاهر می بینیم کار انجام می دهد. همان طور که در آینده توضیح خواهیم داد تمام عملیات در یکجا با استفاده از محیط Rails انجام می شود. اگر یک صفحه Web داده های برنامه را ارسال نماید،Active Record می تواند آنرا به مدل (model) مورد نظر ما تبدیل کند. Active Recordاعتبار سنجی های (Validation) مشکل و پیچیده را پشتیبانی می کند، و اگر داده های نا معتبر وارد شود،Rail به سادگی و با استفاده از تنها یک خط کدنویسی پیغام مناسبی را صادر می کند.
Active Record پایه و اساس مدل MVC مربوط به معماری Rails می باشد که در آینده بیشتر توضیح داده خواهد شد.
Controller و View
Controller و View به عنوان بخش هایی از MVC کاملآ روشن و واضح هستند.Controller داده ها را برای View آماده کرده و Event هایی که از طرف صفحات تولید شده، به وسیله View ها دریافت می نماید. به خاطر این ارتباط و تعامل، پشتیبانی برای View ها وController ها در Rails درون یک کامپوننت به نام Action Pack قرار می گیرد.
در مورد کدهای View و Controller نرم افزارتان دچار اشتباه و سردرگمی نشوید که به خاطر وجود Action Pack در یک کامپوننت قرار می گیرند، کاملآ برعکس Rails به شما امکانی می دهد که به صورت کاملآ مستقل بخش های کنترل و نمایش نرم افزار خود را به وجود آورید.
پشتیبانی View
در Rails، View مسئول ایجاد تمام یا قسمتی از یک صفحه برای نمایش در یک browser می باشد. در ساده ترین حالت یک View مقدار قابل توجهی از کدهای HTML بوده که مقداری متن ثابت را نمایان می کند. در Rails محتوای پویا(dynamic) به وسیله الگوها(templates) تولید می شود که در سه حالت قرار می گیرند. معمول ترین حالت rhtml نامیده می شود که کدهای Ruby رادرون قالب HTML با استفاده از ابزاری به نامERB(Embedded Ruby) قرار می دهد. (این حالت برای افرادی که با JSP یا PHP کار کرده اند آشنا می باشد). این راهکار بسیار انعطاف پذیر می باشد. با توجه به قرارگیری کد در View ها در اضافه کردن منطق(logic) که باید درModel یا Controller قرار گیرد ریسک می کنیم. این مساله به طور کلی بی اساس است: View ها شامل کدهای فعال حتی در معماری اصلی MVC می باشند.رعایت یک استقلال واضح بین آنها بخشی از کار توسعه دهنده می باشد.
دومین طرح الگوrxml بوده که به شما اجازه سازمان دهی مستندات XML را با استفاده از کدهای Ruby می دهد.ساختار کدهای XML تولید شده به طور اتوماتیک از ساختار کدهای دیگر تبعیت می کند.
Rails همچنین View های rjs را ایجاد می کند. اینها به شما اجازه می دهند تا بخش هایی از کدهای Java Script را که در سرور اجرا خواهند شد تولید نمایید. که این امکان برای تولید نماهای Ajax به کار می رود.
و Controller....
Controller در Rails به عنوان مرکز منطقی نرم افزار شما می باشد. آن، ارتباط بین کاربر، Viewو Model را هماهنگ می کند. به هر حال Rails بیشتر این ارتباط را در پشت صحنه مدیریت می کند. کدی که شما می نویسید روی کارایی نرم افزار متمرکز می شود. این باعث می شود کدهای Controller برای توسعه و نگهداری بسیار آسان شود.
Controller همچنین خدمات زیر را شامل می شود:
- مسئول مسیر یابی (Routing) درخواستهای خارجی برای اعمال (Actions) درونی، و مدیریت URL ها به طور گسترده.
- مدیریت cashing که باعث بالا رفتن کارایی نرم افزار می شود.
- مدیریت session که به کاربر احساس ارتباط کاملا دو طرفه با نرم افزار را می دهد.
خوب در اینجا اطلاعات کلی را در مورد Rails به دست آوردیم حال می خواهیم با استفاده از مثال های واقعی قدرت Rails را به نمایش گذاریم. در بخش بعدی ما Rails را روی سیستم نصب نموده سپس کدهای ساده ای می نویسیم تا از صحت نصب اطمینان حاصل شود.

نصب کردن Rails
این بخش شاید یکی از مشکل ترین بخش های آموزش Rails باشد. در این بخش شما فقط یک ابزار پیشرفته توسعه وب را روی سیستم به همراه تعدادی کامپوننت نصب می کنید.
Mike Clarck و Dave Thomas مجموعه ای از استودیوی های Rails را راه اندازی نموده اند که افرادی که در Ruby یا Railsمبتدی هستند برای نوشتن نرم افزارهای خود می توانند از آن ها استفاده نمایند. (http://pragmaticstudio.com)
نیازمندی ها:
"توجه داشته باشید که چون اکثر توسعه دهندگان نرم افزار در ایران در محیط ویندوز برنامه نویسی می کنند روش نصب Rails در این سیستم عامل توضیح داده خواهد شد."
برای اجرای Rails در سیستمتان شما به موارد زیر نیاز خواهید داشت:
- مفسر Ruby. Rails توسط Ruby نوشته شده است و شما نیز نرم افزارهایتان را با Ruby خواهید نوشت. گروه توسعه Rails پیشنهاد می کنند که از Ruby نسخه 1.8.4 استفاده نمایید. (آخرین نسخه Ruby در اکتبر 2006 1.8.5 است).
- Ruby on Rails. در این نوشتار از Ruby on Rails نسخه 1.2 استفاده شده است.
- تعدادی Library
- یک پایگاه داده. ما از MYSQL 5.0.22 در اینجا استفاده می کنیم.
برای توسعه یک نرم افزار این تمام چیزی است که نیاز داریم. البته اگر شما بخواهید نرم افزار خود را اجرا نمایید نیاز به یک Web Server خواهید داشت. که نرم افزارهای Rails در آن اجرا شوند.
نصب در ویندوز
کسانیکه از سیستم عامل ویندوز استفاده می کنند دارای امتیاز بزرگی هستند زیرا تمام چیزهایی که برای توسعه و اجرای نرم افزار با Rails را نیاز دارند در یک Package قرار گرفته است. Instant Rails ابزاری است که شامل Ruby ، Rails، MYSQL و تمام چیزهایی که برای نوشتن برنامه نیاز دارید است. و حتی شامل یک Apache Web server بوده که تمام کدهایی که شما برای اجرای نهایی نرم افزار نیاز دارید را با کارایی بالا پشتیبانی می کند.
1- یک پوشه ایجاد نموده که فایل های Instant Rails را درون آن قرار خواهید دهید. توجه داشته باشید که مسیر پوشه نمی تواند شامل Space باشد.
2- برای دان لود کردن آن وارد سایت )Instant Rails (http://instantrails.rubyforg.org/wiki/wiki.pl شده و فایل زیپ شده که حدود 50MB است را دان لود کنید. (در عوض تمام چیزی که نیاز دارید یکجا خواهید داشت).
3- فایل ها را از حالت زیپ خارج کنید و آنرا در پوشه ای که ساخته اید کپی کنید.
4- در پوشه، فایل اجرایی InstantRails.exe را اجرا کنید:

- اگر از شما سوالی مبنی بر تولید فایل تنظیم مطرح شد روی OK کلیک کنید.
- اگر شما یک هشدار امنیتی مبنی بر اینکه Apache به وسیله firewall بلاک شده دیدید، چون ما نیازی به آن نداریم لازم نیست آنرا از حالت بلاک خارج کنید.


شما باید پنجره کوچک Instant Rails را مشاهده کنید. می توانید از آن برای مانیتور و کنترل کردن برنامه های Rails استفاده کنید. به هر حال ما مقداری جلوتر رفته و از پنجره کنسول استفاده می کنیم. برای اجرای آن روی دکمه (I) در گوشه سمت چپ و بالای پنجره کلیک نمایید. از منوی باز شده گزینه Rails Applications… و سپس Open Ruby Console window را انتخاب نمایید. شما باید پنجره ای شبیه به Command Windows مشاهده نمایید که پوشه rails_apps به عنوان پوشه جاری نمایش می یابد. شما می توانید نسخه Rails و Ruby را با استفاده از دستورات Rails -v و Ruby -v چک کنید.
قبل از شروع کار 2 مورد را باید بدانید:
اول و مهمترین اینکه، هر زمان شما بخواهید در کنسول دستوری را وارد کنید شما باید کنسول را از طریق Instant Rails اجرا کنید. شبیه به حالتی که ما انجام دادیم(کلیک روی دکمه I ). اگر شما یک کنسول را از طریق ویندوز اجرا کنید کار نخواهد کرد. (چرا؟ زیرا Instant Rails خود شامل تمام نیازمندی هایی می باشد که نصب نشده است). یعنی همه برنامه هایی که شما نیاز دارید در مسیر ویندوز قرار ندارند. شما می توانید با اضافه کردن مسیرها از کنسول عادی ویندوز نیز استفاده نمایید.
دوم، در هر زمان شما می توانید نسخه Rails خود را Upgrade نمایید. که این عمل با استفاده از دستور زیر انجام می پذیرد:
C:/rails_apps>gem update rails --include-dependencies
محیط توسعه
خط فرمان (Command Line)
من مقدار زیادی از کارم را در خط فرمان انجام می دهم. اگر چه تعداد زیادی ابزار گرافیکی (IDE) وجود دارد که در تولید و مدیریت نرم افزار های Rails کمک می کند، من متوجه شدم که خط فرمان هنوز یکی از قدرتمندترین ابزارها می باشد. بنابراین اگر وقتی را برای آشنایی با این ابزار اختصاص دهید ارزش دارد. یادگیری ویرایش دستوراتی که شما وارد می کنید، چگونگی جستجو و ویرایش دستورات قبلی و چگونگی تکمیل نام فایل ها و دستوراتی که شما تایپ می کنید، از جمله کارهایی هستند که با خط فرمان به راحتی بایستی انجام دهید.
کنترل نسخه (Version Control)
من همه کارهایم را در یک سیستم کنترل نسخه مثل Subversion نگهداری می کنم. پروژه جدید Rails را در زمان ایجاد در Subversion وارد کرده و تغییرات را یکبار بعد از تست اعمال می کنم.
اگر شما روی پروژه Rails همراه با افراد دیگر کار می کنید، یک سیستم CI (Continuous Integration) ایجاد نمایید. هنگامیکه هر شخص تغییرات را وارد کند سیستم CI یک کپی جدید از نرم افزار را برای کار روی آن ایجاد می نماید و تمام تست ها را روی آن اجرا می کند. و این سلامت نرم افزار شما را در مقابل تغییرات تا حدود زیادی تضمین می کند.
پس IDE چه شد؟
اگر شما با تجربه ای که در محیط هایی مثل .NET و Java داشته اید وارد Rails شوید دچار شگفتی خواهید شد. همه ما می دانیم که نوشتن کد به صورت پیشرفته بدون یک IDE 100 مگابایتی غیر ممکن است. اما در نهایت در آینده متوجه می شوید که اینطور نیست.
هیچ IDE کاملی برای Ruby on Rails تا حال حاضر وجود نداشته است ولی در عوض بیشتر توسعه دهندگان Rails از ویرایشگرهای (Editors) قدیمی استفاده می کنند. در محیط Ruby پشتیبانی بیشتر از این، در مورد IDE ها نیاز نیست (سادگی کار).
ویرایشگرها (Editors)
من برنامه های Rails را با استفاده از ویرایشگر برنامه نویسی می نویسم و اینرا می دانم که ویرایشگرهای مختلف در زبان های مختلف بهترین کارایی را دارند. برای مثال من این نوشتار را با استفاده از Emacs انجام دادم. اما Emacs برای توسعه Rails ایده ال نیست. من به طور کلی از Textmate برای محیط Mac OS x استفاده می کنم. اگر چه استفاده از Editor بیشتر سلیقه ای است اما در انتخاب آن به موارد زیر دقت کنید:
- پشتیبانی از Syntax Highlighting برای زبان Ruby و HTML و همچنین فایل های rhtml .
- پشتیبانی از قرار دادن تو رفتگی (Indentation) اتوماتیک در کدهای Ruby که البته این امکان مربوط به زیبایی و خوانایی کدها می باشد.
- پشتیبانی از وارد کردن ساختار Ruby on Rails. شما مقدار زیادی متدهای کوتاه می نویسید: اگرIDE اسکلت متدها را با استفاده از یک یا دو کلید ایجاد کند شما می توانید روی کدهای اصلی متدها تمرکز نمایید.
- پویشگر خوب فایل ها. پروژه های Rails دارای تعداد زیادی فایل می باشد که نیاز دارید کدهای مختلفی را در فایل های متفاوتی وارد کنید بنابراین یک IDE خوب به شما کمک می کند به سرعت در فایل های مختلف قرار گرفته و کدهای مورد نظر خود را وارد نمایید.


تکمیل نام ها (Name Completion)
برخی از نام ها در Ruby طولانی هستند بنابراین یک IDE خوب شما را در وارد کردن اینگونه نام ها یاری می رساند. ما در اینجا تعدادی از ویرایشگرها را معرفی می کنیم و شما می توانید طبق سلیقه شخصی خود با یکی از آنها کار کنید:
- TextMate (http://macromates.com): یک ویرایشگر Ruby در محیط Mac OS x .
- RadRails (http://radrails.org): یک محیط توسعه مجتمع برای Rails که با استفاده از Eclipse ایجاد شده و در محیط Windows، Mac OS x و Linux قابل استفاده است. (این محصول به عنوان بهترین محصول کد باز در سال 2006 که با Eclipse تولید شده می باشد) .
- Jedit (http://jedit.org) : یک ویرایشگر با تمام ویژگی ها که از Plug in ها نیز پشتیبانی می کند.
- Komodo (http://www.activestate.com/products/komodo/) یک ویرایشگر برای زبان های پویا مثل Ruby میباشد.
شما در این زمینه می توانید از توسعه دهندگان با تجربه نیز کمک بگیرید(میتوانید به سایت http://joelonsoftware.com مراجعه نموده و سوال های خود را در آنجا مطرح نمایید).
Rails و پایگاه داده:
مثال هایی که در آینده نوشته می شود از MYSQL نسخه 5 استفاده می کند. پیشنهاد می شود شما نیز از این پایگاه داده برای نوشتن این برنامه ها استفاده نمایید.
برای ارتباط با پایگاه داده شما به دو لایه از نرم افزار نیاز دارید. اول درایور (Driver) پایگاه داده و کتابخانه Ruby که API های سطح پایین پایگاه داده را به محیط سطح بالای برنامه نویسی Ruby متصل می کند. به خاطر اینکه به طور کلی پایگاه داده ها با استفاده از کتابخانه های زبان C تولید می شوند. این کتابخانه های Ruby نیز با زبان C نوشته شده است. لایه دوم، تطبیق دهنده پایگاه داده در Rails می باشد. هر کتابخانه پایگاه داده API های مخصوص به خود را داراست. تطبیق دهنده پایگاه داده Rails این تفاوت ها را مخفی می کند. به طوریکه برنامه Rails نیازی به دانستن اینکه چه پایگاه داده ای در حال اجراست را ندارد. اگر شما بخواهید از پایگاه داده دیگری استفاده کنید باید بدانید که Rails از DB2، MYSQL، Oracle، Postgres، Firebird، SQL Server و SQLite نیز پشتیبانی می کند. به جز MYSQL برای تمام پایگاه های داده شما نیاز دارید که درایور پایگاه داده را نصب کرده و از کتابخانه هایی که Rails می تواند با استفاده از آن ها به پایگاه داده متصل شود استفاده کنید.




Agile Web Development with Rails by
Dave Thomas
David Heinemeier Hansson

http://www.mehrzadsoft.com

هیچ نظری موجود نیست: