۱۳۸۶ اسفند ۱۴, سه‌شنبه





بخش 7 از مجموعه مقالات Ruby on Rails
ترجمه: ابوالفضل محمودی (ab.mahmoodi@gmail.com)
منبع: Practical Rails Projects (Book)
نویسنده: Eldon Alameda

توسعه نرم افزارهای واقعی با استفاده Ruby on Rails
در این بخش و بخش های دیگر میخواهیم قسمتهایی از یک نرم افزار واقعی را در محیط Ruby on Rails پیاده سازی نماییم. در این بخش ها قدم به قدم پیش رفته و قسمتهای مختلف را با ارائه توضیحات کامل پیاده سازی مینماییم.
هدف ما از ارائه اینگونه مقالات آموزشی معرفی هر چه بیشتر امکانات فوق العاده این ابزار بوده و اینکه بگوییم استفاده از ابزارهای کد باز (Open Source) نسبت به به ابزارهای توسعه تجاری بسیار آسانتر و توسعه نرم افزار با آنها سریع تر امکانپذیر میباشد.
Ruby on Rails یک محیط توسعه نرم افزارهای تحت وب میباشد و با وجود اینکه مدتی بیش نیست که از تولد آن میگذرد جای خود را در بین توسعه دهندگان وب پیدا کرده و حرف های زیادی برای گفتن دارد. بطوریکه تقریبا هر ماه در نقاط مختلف دنیا همایش هایی برگزار شده و در مورد امکانات جدید این ابزار گفتگو میشود.
پیاده سازی یک سیستم ثبت نام و تعیین معرف کاربر (User Registration and Authentication System) با استفاده از ابزار توسعه Ruby on Rails
با پیاده سازی ساختار پروژه آغاز نموده و با استفاده از دستور "rails" در محیط اجرای دستورات Rails (Command Prompt) پروژه ای با نام "monkey" ایجاد میکنیم.
برای آشکار شدن مطلب ما میخواهیم از بیرون کار شروع کنیم. ما با ساختن پایه های کار و الگوهای برنامه (Templates) ، پروژه را آغاز مینماییم. سپس برای اضافه نمودن سیستم ثبت نام و تعیین معرف کاربر مدل ها، کنترولرها و متدهایی که مورد نیاز است را به برنامه اضافه نموده تا شکل واقعی را به خود بگیرد.
پیاده سازی صفحه آرایی (layout)
این یک برنامه مدیریت وظیفه (Task Management) میباشد بنابراین ما به یک صفحه نیاز داریم که لیست وظایف روزانه را نمایش دهد بنابراین اجازه دهید جلوتر رفته و اولین صفحه و یک کنترولر را ایجاد کنیم، نام این کنترولر را "today" میگذاریم.
دستور زیر را اجرا نموده که توسط آن یک کنترولر با نام "today_controller.rb" و یک صفحه خالی (index) ایجاد میکند.
ruby script/generate controller today index
exists app/controllers/
exists app/helpers/
create app/views/today
exists test/functional/
create app/controllers/today_controller.rb
create test/functional/today_controller_test.rb
create app/helpers/today_helper.rb
create app/views/today/index.rhtml
خوب حال کنترولر جدید ما در مسیر app/controllers/ ایجاد شده و صفحه index.rhtml در مسیر app/views/today ایجاد شده است.
با باز کردن فایل today_controller ما خواهیم دید که ریلز متد index را درون آن ایجاد نموده است.
class TodayController < controller =""> "today"
map.connect ':controller/service.wsdl', :action => 'wsdl'

# Install the default route as the lowest priority.
map.connect ':controller/:action/:id.:format'
map.connect ':controller/:action/:id'
end
صفحه آرایی ابتدایی
یک صفحه وب علاوه بر کارایی بایستی دارای زیبایی نیز باشد. در ریلز امکاناتی وجود دارد که با استفاده از آنها میتوان این زیبایی را به صفخات بخشید. یکی از آن امکانات کلیدی این است که ما قادر هستیم قالب هایی را برای جدا نمودن آیتم های نمایش از قبیل "header" و "footer" در یک فایل ایجاد نموده که در تمام صفحات قابل استفاده میباشد. به طور ساده فایل را با محتوای مورد نظر خود ایجاد مینماییم.
هدف ما این است که طرحی ساده و جذاب ایجاد نماییم بنابراین میتوانیم با ایجاد کردن یک فایل برای تمام برنامه کار را جلو ببریم. قبل از شروع کار شما نیاز دارید منابعی را از سایت Apress دانلود نمایید سپس فایل "styles.css" را در مسیر public/stylesheets کپی نمایید. و تمام تصاویری که دانلود نموده اید را در مسیر public/images کپی نمایید. با اضافه نمودن این فایل ها به پروژه خود میتوان جلوتر رفته و یک قالب استاندارد که تمام الگوها را پوشش میدهد ایجاد نمایید. فایلی با نام "application.rhtml" در مسیر monkey/app/views/layouts ایجاد نموده و آنرا به شکل زیر ویرایش کنید:




MonkeyTasks

<%= stylesheet_link_tag 'styles' %>
<%= javascript_include_tag :defaults %>






  • <%= link_to "Today", :controller => 'today', :action => 'index' %>


  • <%= link_to "Logout", :controller => 'account', :action => 'logout' %>


<%= flash[:notice] %>


<%= yield %>



همانطور که میبینید این شامل کدهای استاندارد HTML و چند متد مثل stylesheet_linktag 'styles' میباشد.
این متد کارش ایجاد یک لینک به فایل styles.css میباشد. در این قالب متد مذکور کد HTML زیر را تولید میکند:

متد image_tag 'monkeyhead.gif' یک عنصر HTML را تولید میکند که در اینجا لینکی به یک تصویر با نام مشخص شده ایجاد میشود که کد HTML زیر را تولید میکند:
Monkeyhead

متد link_to "Today", :controller => 'today', :action => 'index'
همچنین به متدهای درون کنترولر مشخص شده مراجعه میکند که باعث میشود ناچار به نوشتن کدهای HTML به صورت دستی نباشید. این متد کد HTML زیر را تولید میکند:
Today
متد جادویی "yield" کنترل رندر کردن صفحه را برای الگویی که قرار است رندر شود ارسال میکند. به عبارت دیگر اینجا محلی است که الگوهای حقیقی درون این قالب رندر خواهد شد.

javascript_include_tag :defaults
این متدی است در ریلز که به ما امکان میدهد به شکل خودکار نمونه های کتابخانه های JavaScript را درون صفحه قرار دهیم. در حقیقت شبیه اینست که کدهای زیر را در سورس قرار دهیم:
<%= javascript_include_tag 'prototype' %>
<%= javascript_include_tag 'effects' %>
<%= javascript_include_tag 'dragdrop' %>
<%= javascript_include_tag 'controls' %>
<%= javascript_include_tag 'application' %>


اگر شما برنامه در یک مرورگر وب اجرا کنید (این کار را با وارد کردن آدرس http://localhost:3000/today انجام دهید) نتیجه را به شکل زیر خواهید دید:


اولین الگوی ما
خوب حالا میخواهیم صفحه اصلی برنامه را ایجاد نماییم. فایل index.rhtml را در مسیر app/views/today باز کرده و کد زیر را به آن اضافه نمایید:




Today's Tasks



  • test

  • test2






بعد از وارد کردن این کد و ذخیره کردن برنامه در مرورگر کلید Refresh را کلیک کرده تا تصویر زیر ببینید:



همانطور که می بینید ما در عرض چند دقیقه صفحه اصلی برنامه را ایجاد نمودیم که یک نمایه قابل قبول را برای ما ایجاد نموده است.
در بخش های بعدی توسعه این نرم افزار را ادامه خواهیم داد.

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

آموزش Ruby on Rails



Ruby on Rails (3)
مقدمه:
در دو بخش گذشته توضیحات نسبتا کاملی درباره زبان Ruby و ابزار توسعه Ruby on Rails برای نرم افزارهای تحت وب (Web Based) در اختیار شما قرار گرفت. گفتیم که این زبان از لحاظ کارایی و سادگی استفاده نسبت به زبان های دیگر دارای برتری هایی می باشد. اما اینجا پرسشی وجود دارد و آن این است که چرا اینگونه زبان ها در ایران مورد توجه قرار نمی گیرند؟ چرا ابزارهایی مثل .NET بین توسعه دهندگان نرم افزارها بسیار محبوب هستند؟ شما در مورد این پرسش ها چه می اندیشید؟ از دیدگاه ما یکی از دلایل، نبود Copyright می باشد. توجه داشته باشید که زبان Ruby و ابزار Ruby on Rails یک محصول کد باز (Open Source) می باشد. بنابراین در کشورهایی که قانون Copyright وجود داشته و همگان وظیفه دارند از این قانون تبعیت کنند، کسانیکه در زمینه توسعه نرم افزارها فعالیت می کنند همواره به دنبال ابزارهایی هستند که Open Source بوده و بتوانند بدون هیچ محدودیتی از آنها استفاده نمایند. بنابراین در اینگونه کشورها ابزارهای Open Source مثل Linux ، Java ، Ruby و... دارای جایگاه ویژه ای هستند و در صد قابل توجهی از توسعه دهندگان از این ابزارها به شکل وسیعی استفاده می کنند.
آشنایی با تکنولوژی AJAX (Asynchronous Java Script and XML) در Web 2.0
نرم افزارهای تحت وب تجاری امروزه در رده نرم افزارهای سازمانی (Enterprise) قرار می گیرند. آنها برای تمام کارها از مدیریت ارتباط با مشتری گرفته تا طراحی منابع سازمانی (ERP) مورد استفاده قرار می گیرند. اگر چه آنها نرم افزارهای سودمندی می باشند ولی اینگونه نرم افزارها در بیشتر بخش ها شامل فرم های HTML و کدهایی که وظایف سنگینی در طرف Server انجام می دهند می باشد. رابط کاربر (UI) معمولا ضعیف بوده و در تعامل با کاربر نمی باشد. به طوریکه با هر بار وارد کردن اطلاعات و ارسال آنها به سرور یکبار صفحه به طور کامل باید Refresh گردد. واین عمل به خصوص با اینترنت کم سرعت برای کاربر بسیار خسته کننده می باشد.
در اینجا AJAX ابزاری بسیار مفید برای بهینه ساختن نرم افزارهای تحت Web می باشد. این روش برای گسترش امکانات نرم افزارهای تحت وب و کارهایی که کاربر در مرورگر خود انجام می دهد مورد استفاده قرار می گیرد. AJAX، نه تنها برای بهینه کردن و متحول کردن معماری سنتی وب بوده بلکه ابزاری است که برنامه های تحت وب را با نرم افزارهای desktop قابل رقابت می سازد.
شرکت Google یکی از توسعه دهندگان AJAX بوده و در خیلی از محصولات خود مثل Gmail و Google Maps از آن به طور گسترده ای بهره برده است. AJAX اصولا تغییر نامی است از DHTML. AJAX در حال حاضر در خیلی از نرم افزارها و تکنیک های web مورد استفاده قرار می گیرد.
ایجاد یک برنامه جدید
بعد از نصب کردن محیط Rails شما می توانید از یک دستور جدید استفاده نمایید. دستور rails، که برای ایجاد یک برنامه جدید مورد استفاده قرار می گیرد. برای ایجاد یک برنامه جدید یک کنسول باز کرده و وارد پوشه ای شوید که می خواهید برنامه های جدید در آن ایجاد شوند. در مثال ما یک پوشه به نام work وجود دارد. در آن پوشه از دستور rails برای ایجاد یک برنامه جدید به نام demo استفاده نمایید. توجه داشته باشید اگر پوشه ای با آن نام موجود باشد. از شما برای جایگزین کردن پرسش می شود.



dave> cd work
work> rails demo
create
create app/controllers
create app/helpers
create app/models
create log/development.log
create log/test.log
work>


دستور rails یک پوشه با نام demo ایجاد می کند. وارد آن پوشه شده و محتوای آنرا لیست کنید(در ویندوز دستور dir) شما باید فایل ها و زیر دایرکتوری ها را مشاهده نمایید. ما از تعدادی از این پوشه ها استفاده می کنیم. پوشه app برای نوشتن برنامه و پوشه Script که شامل دستورات مفیدی می باشد.
اجازه دهید به پوشه Script بپردازیم. یکی از اسکریپت های آن Server نامیده می شود. این Script یک Web Server را اجرا نموده که نرم افزار جدید ما به وسیله آن اجرا می گردد.


demo> ruby script/server
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2006-01-08 21:44:10] INFO WEBrick 1.3.1
[2006-01-08 21:44:10] INFO ruby 1.8.2 (2004-12-30) [powerpc-darwin8.2.0]
[2006-01-08 21:44:11] INFO WEBrick::HTTPServer#start: pid=10138 port=3000


همانطور که آخرین خط نشان می دهد یک وب سرور روی پورت 3000 اجرا شده است. ما می توانیم در یک مرورگر وب با وارد کردن آدرس http://localhost:3000 به برنامه دسترسی پیدا کنیم.



زمانیکه به پنجره کنسول نگاه می کنید در آنجا محلی برای پیگیری اجرای نرم افزار خواهید دید. این پنجره کنسول را در همین حالت قرار می دهیم. زمانیکه بخواهیم برنامه را به پایان برسانیم می توانیم با استفاده از کلید ترکیبی Ctrl+C در این پنجره وب سرور را غیر فعال نماییم.
Hello, Rails
همانطور که قبلا گفته شد، Rails یک محیط Model-View-Controller می باشد که درخواست های ورودی از یک مرورگر را دریافت نموده، آنرا برای پیدا کردن یک Controller ترجمه کرده و یک متد را در آن Controller فرا خوانی می کند. سپس Controller یک نمای (view) ویژه برای نمایش نتایج به کاربر در خواست می کند. برای نوشتن برنامه ساده Hello, World ما نیاز به نوشتن کد برای یک Controller و یک View داریم. ما نیازی برای کد نویسی برای Model نداریم، زیرا با هیچ گونه داده ای مواجه نیستیم.
به همان روشی که ما از دستور rails برای ایجاد کد برنامه جدید استفاده کردیم، می توانیم از یک دستور تولید کننده (generator) برای ایجاد یک Controller جدید برای برنامه خود استفاده نماییم. این دستور generate نامیده شده و در پوشه Script مربوط به پروژه demo که ما ایجاد کرده ایم قرار دارد. بنابراین برای ایجاد یک Controller با نام Say ، ما با اطمینان از اینکه در شاخه demo قرار داریم دستور زیر را اجرا می کنیم.


demo> ruby script/generate controller Say
exists app/controllers/
exists app/helpers/
create app/views/say
exists test/functional/
create app/controllers/say_controller.rb
create test/functional/say_controller_test.rb
create app/helpers/say_helper.rb

این دستور فایل ها و پوشه های به وجود آمده را ثبت می کند. فایل جدید به وجود آمده در این مسیر قرار دارد:
app\controllers\say-controller.rb
آنرا باز می کنیم:
class SayController < ApplicationController
end
SayController یک کلاس خالی بوده و از ApplicationController به ارث برده است.
بنابراین به صورت اتوماتیک تمام خصوصیات یک Controller را داراست. ما نیاز داریم مقداری کد به آن اضافه کنیم. در حال حاضر ما نیاز به اضافه نمودن یک متد خالی داریم. سوال اینست که چه چیزی این متد را فرا خوانی می کند؟ و باید بگوییم که Rails درخواست ها را مدیریت می کند.
Rails و URL ها
شبیه به هر برنامه تحت وب دیگر یک برنامه نوشته شده توسط Rails به وسیله URL با کاربر ارتباط برقرار می کند.

http://myurl.com/say/hello
say: Controller
hello: action(method)

فرض کنید برنامه شما در آدرس http://myurl.com قرار دارد. وب سروری که میزبان نرم افزار شماست به صورت کاملا هوشمندانه مسیرها را شناسایی می کند. آن می داند که درخواست های ورودی به این آدرس با نرم افزار ارتباط دارد.
Rails از مسیر (path) برای تشخیص نام Controller و متدهای آن استفاده می کند.
اولین متد
ما یک متد به نام hello به SayController اضافه میکنیم. اما چه کاری انجام میدهد؟ در حال حاضر هیچ! به خاطر داشته باشید کار یکController ایجاد تنظیمات برای اینکه View بداند چه چیزی را باید نمایش دهد میباشد. در این برنامه چیزی برای انجام دادن در متد وجود ندارد بنابراین یک متد خالی کافیست. از ویرایشگر مورد دلخواه خود برای تغییر فایل say_controller در app\controllers استفاده نموده و متد hello را به آن اضافه نمایید:


class SayController < ApplicationController
def hello
end
end

حال میخواهیم آنرا فراخوانی نماییم. در مرورگر خود آدرس http://localhost:3000/say/hello را وارد نمایید. شما پیغامی شبیه به این ملاحظه مینمایید:




علت این خطا کاملا مشخص است. ما کلاس Controller و متد آنرا ایجاد نمودیم اما به Rails نگفتیم که چه چیزی را به نمایش گذارد.
برای کامل نمودن برنامه یک الگو ایجاد مینماییم. به طور پیش فرض Rails به دنبال الگوها در فایلهای .rhtml با نامی یکسان با نام متد میگردد. در ابن برنامه ما فایلی با نام hello.rhtml در مسیر app\views\say ایجاد مینماییم و کد زیر را در آن قرار میدهیم:









Hello, Rails!


Hello from Rails!






فایل را ذخیره کرده و مرورگر خود را یکبار Refresh کنید. شما باید پیغام مورد نظر را در مرورگر ملاحظه کنید. توجه نمایید که نیازی به compile کردن برنامه نداریم. در طول نوشتن برنامه، Railsبه طور اتوماتیک تغییرات را روی نرم افزار اعمال میکند.




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

آموزش 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