مدیریت محتوا با Sinatra و Mongo – قسمت آخر

در قسمت دوم، یاد گرفتیم که چطور پیج هایی که ساختیم رو نمایش بدیم! در این قسمت، میخوایم مستقیما با دیتابیس وارد مذاکره بشیم! در واقع در این قسمت میخوایم به کاربر اجازه بدیم که خودش یک پیج ایجاد کنه. خیلی هم شیک و ساده. ابتدا این قسمت رو به main.rb اضافه کنید :

get '/pages/new' do
	@page = Page.new
	erb :new
end

در اینجا، گفته شده که یک صفحه به اسم new.erb خونده و نمایش داده بشه. علاوه بر اون، گفتیم که از کلاس Page هم یک شیء جدید برامون بسازه. حالا، فایل new.erb رو به این شکل ایجاد کنید :

<h1> New Page </h1>
 
<form action="/pages" method="post">
	<h2> Title: </h2>
	<input type="text" name="page[title]">
	<h2> Text: </h2>
	<textarea name="page[text]" cols="50" rows="5">
	</textarea>
	<br/>
	<input type="submit">
</form>

در اینجا یک فرم ایجاد کردیم که با متد POST کار میکنه. قبل تر، در مورد متد پست توضیح دادیم، و میتونید این مطلب رو در موردش بخونید تا درکش کنید!

بسیار خوب، الان برای این که برنامه ما درست و حسابی کار کنه، فقط نیاز داریم که با یک متد POST بهش بفهمونیم که اطلاعات رو توی دیتابیس بنویسه. و خب این قسمت رو به main.rb مون اضافه میکنیم :

post '/pages' do
	page = Page.create(params[:page])
	redirect to("/pages/#{page.id}")
end

خب، در اینجا میگیم که پیجی با پارامتر هایی که داده شده بساز، و بعدش برگرد به همون پیج. به همین سادگی!

جمع بندی

در کل این سه قسمت آموزش، یک CMS بسیار ساده ساختیم که یه ادیتور داشت و میتونست نوشته های ما رو توی یک دیتابیس ذخیره کنه و بعد به ما نشون بده. کل فایل main.rb ما به این شکل در اومد :

require 'sinatra'
require 'mongoid'
 
configure do
	Mongoid.load!("./database.yml")
end
 
class Page
	include Mongoid::Document 
	field :title, type: String
	field :text,  type: String
end
 
 
get '/pages' do
	@pages = Page.all
	@title = "Page List"
	erb :index
end
 
get '/pages/new' do
	@page = Page.new
	erb :new
end
 
post '/pages' do
	page = Page.create(params[:page])
	redirect to("/pages/#{page.id}")
end
 
get '/pages/:id' do
	@page = Page.find(params[:id])
	@title = @page.title
	erb :show
end

و کل ساختار فولدرهای ما به این شکل در اومد :

simple-cms/
├── database.yml
├── main.rb
├── README.md
└── views
    ├── index.erb
    ├── new.erb
    └── show.erb

با استفاده از چنین الگویی، شما قادرید که برنامه های واقعی تری بنویسید و از اونها در دنیای واقعی استفاده کنید. در قسمت اول ذکر شد که این CMS بدرد وبلاگ و وبسایت و … نمیخوره. دلیلشم مشخصه! توی این برنامه هیچگونه پرمیشن و سشن و … ای رعایت نشده که بدونیم کدوم یوزر میتونه پیج ایجاد کنه کدوم نمیتونه و این قضایا. یعنی امنیت نداره کانتنتی که روی اون وبسایت تولید میشه. شما میتونید با خوندن داکیومنت در مورد session ها این مورد رو هم هندل کنید و CMS کامل تری بسازید!

موفق باشید :)

مدیریت محتوابا Sinatra و Mongo – قسمت دوم

در قسمت قبل، یاد گرفتیم که چگونه یک سیستم مدیریت محتوای کوچولو رو با پایگاه داده هاش، ایجاد کنیم. در این قسمت، نمایش محتوای پیج در لینک اختصاصی و همچنین نمایش لینک ها در صفحه اصلی رو بررسی میکنیم.

آموزش این قسمت، کوتاه تر از دفعات پیش هستش، دلیلشم اینه که در بخش آخر، باید متد POST رو بررسی کنیم (اگرچه در مقاله ای قبلا این کار رو کردیم، اما میخوایم دوباره آموزش تکرار بشه و یه استفاده عملی از این موضوع داشته باشیم).

بسیار خوب، فایل index.erb که صفحات ما رو نشون میداد باز کنید، به این شکل تغییرش بدید :

<h1> Pages </h1>
<% if @pages.any? %>
<p>
<%  @pages.each do |page| %>
<a href="/pages/<%= page.id %>">
<h1><%= page.title %> </h1>
</a>
<p> <%= page.text %> </p>
<% end %>
</p>
<% else %>
<h1> No pages added! </h1>
<% end %>

دقت کردید؟ ما از id صفحات برای تولید لینک به اون ها استفاده میکنیم!

حالا بیاید کمی فکر کنیم، وقتی روی این لینک ها کلیک کنیم چه اتفاقی میفته؟ طبیعتا یه ارور ۴۰۴ به ما نشون داده میشه و به ما گفته میشه که صفحه یافت نشده. معمولا سیناترا به صورت پیشفرض یک راهنمایی کوچک هم میکنه که چه چیزی باید به فایل main.rb و … اضافه کنیم تا بتونیم نتیجه درستی بگیریم.

حالا برای این که لینک ها ما رو به جای درستی راهنمایی کنند، کافیه که فایل main.rb رو باز کنیم و این خطوط رو بهش اضافه کنیم :

get '/pages/:id' do
	@page = Page.find(params[:id])
	@title = @page.title
	erb :show
end

خب توی این کد، میگیم که پیج ها رو بر اساس id شون پیدا کنه، و تیتر صفحه رو هم تیتر پیج ایجاد شده بذاره. و در نهایت هم میگیم که ظاهر برنامه در show.erb هست. حالا، نیاز داریم که یک show.erb هم بنویسیم :

<h1><%= @page.title %> </h1>
<p>
<%= @page.text %>
</p>
<a href="/pages"> Back to main page </a>

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

مدیریت محتوا با Sinatra و Mongo – قسمت اول

توی این نوشته، قصد و هدف اینه که بیایم و با استفاده از فرمورک Sinatra و دیتابیس غیررابطه ای MongoDB ، یک سیستم مدیریت محتوای کوچیک بنویسیم.


دقت کنید که این CMS صرفا یک کار آموزشی بوده و برای استفاده به عنوان CMS اصلی وبلاگ/وبسایت شما به هیچ وجه مناسب نیست

بسیار خوب، برای این که بدونیم از کجا شروع کنیم، ابتدا بیایم ببینیم که از چه چیزهایی قراره که استفاده بشه :

  1. فرمورک سیناترا
  2. ارتباط دهنده شیء – مستند (ODM) برای Mongo (اینجا از Mongoid استفاده میکنیم).

خب، ابتدا بیایم Gemfile رو بنویسیم :

source 'https://rubygems.org'
 
gem 'sinatra'
gem 'mongoid'

بسته به نیازتون، میتونید جم های دیگری هم بهش اضافه کنید.

حالا، باید به برنامه بفهمونیم که دیتابیس ما چه ویژگی هایی باید داشته باشه، پس یک فایل database.yml ایجاد میکنیم و این ها رودرونش مینویسیم :

development:
 clients:
  default:
   database: myCMS
   hosts:
    - localhost:27017
 production:
  clients:
   default:
    uri: <%= ENV['MONGOHQ<em>URL'] %>
    options:
     skip_version_check: true
safe: true

حالا دو مرحله اساسی کارمون انجام شده، هم میدونیم که دیتابیس چه ویژگی هایی داره و هم میدونیم که چه چیزهایی برای درست اجرا شدن برناممون نیازه.

حالا، وقتش رسیده که یک برنامه ساده بنویسیم:

require 'sinatra' 
require 'mongoid'
 
configure do
	Mongoid.load!("./database.yml")
end

این رو در فایلی به اسم main.rb نوشته و ذخیره میکنیم. حالا میتونیم تستش کنیم!

اما این کد، هنوز هیچ چیز قابل دسترسی ای نداره. توی main.rb یک کلاس به اسم Page به این شکل مینویسیم، که بشه مدل ما :

class Page
	include Mongoid::Document
	field :title , type: String
	field :text  , type: String
end

خب، حالا میتونیم برای ساختن صفحاتمون اقدام کنیم. ابتدا از طریق شل اینتراکتیو روبی، یک صفحه نمونه میسازیم :

~:$ irb -r ./main.rb

وقتی که شل اینتراکتیو باز شد، این دستورات رو میتونیم توش تایپ کنیم :

hello = Page.new
hello.title = "Hello, World!"
hello.text  = "This is first page on this CMS!"

حالا ما یک صفحه ساختیم. این ساخته شدن میتونه به این شکل هم انجام بشه :

Page.create(title:"My second page", text:"This is second page I added to this CMS!")

بسیار خوب، الان صفحه ها ساخته شده! پس چطوری میتونیم اطلاعاتشون رو نمایش بدیم؟!

برگردیم توی main.rb و این قطعه کد رو اضافه کنیم :

get '/pages' do
	@pages = Page.all
	@title = "Page List"
	erb :index
end

خب، یک پوشه به اسم views باید ایجاد کنیم، یک فایل به اسم index.erb هم درونش قرار میدیم ، و این ها رو در ایندکس مینویسیم :

<h1> Pages </h1>
<% if @pages.any? %>
<p>
<%  @pages.each do |page| %>
<h1><%= page.title %> </h1>
<p> <%= page.text %> </p>
<% end %>
</p>
<% else %>
<h1> No pages added! </h1>
<% end %>

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

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

 

استفاده از متد POST در سیناترا

فرمورک Sinatra یک میکروفرمورک وب است که اکثر کاربران و توسعه دهندگان روبی، با آن آشنایی دارند. برای شروع و ساخت پروژه هایی که زمان زیادی برایشان نداریم، بدون شک این فرمورک یکی از بهترین انتخاب هاست. در اکثر مثالهایی که در اینترنت موجود است، به گفتن متد get بسنده کرده اند. در حالی متد POST هم متد مهمی در فرمورک های وب به شمار می آید. در این آموزش، استفاده از متد post را بررسی میکنیم.

قدم های اولیه

ابتدا یک پوشه به اسم post-app ایجاد کرده، درون این پوشه پوشه دیگری با نام views ایجاد کنید. سپس در همان پوشه post-app فایل app.rb را نیز ایجاد نمایید. در واقع، این ها قدم های اولیه ما برای نوشتن یک برنامه در سیناتراست. درون پوشه views یک فایل با نام form.erb ایجاد کرده، آن را باز کنید و درونش این محتوا را کپی کنید :

<h3>Simple Form</h3>
<form action="/form" method="post">
  <input type="text" name="content">
  <input type="submit">
</form>

سپس به app.rb رفته، آن را باز کرده و این محتوا را درونش قرار دهید :

require 'sinatra'
 
get '/' do
 erb :form
end

اکنون چنانچه برنامه را اجرا کنید، متوجه خواهید شد که هرچه درون فرم بنویسید، طبیعتا باید به یکجا ارسال شود. اما کجا؟ اینجاست که ما متد POST را نیاز داریم.

اضافه کردن post به کد

همانطور که در کد form.erb مشاهده کردید، ما در قسمت action از آدرس form استفاده نمودیم و همچنین نام محتوای داخل فرم را content گذاشتیم. اکنون فایلی به نام content.erb در views ایجاد کرده، آن را باز کنید و محتوای درونش را به این شکل تغییر دهید :

<h2> You Said </h2> 
<h3> <%= params[:content] %> </h3>

سپس به فایل app.rb برگشته و این خطوط را به آن اضافه نمایید :

post '/form' do
 erb :content
end

و اکنون با اجرای برنامه، هرچه درون فرم طراحی شده بنویسید را در آدرس form مشاهده میکنید. با استفاده از متد post میتوانید اطلاعات را درون یک دیتابیس بنویسید و بیشتر استفاده آن نیز در این موارد است.

موفق باشید.

شروع کار با کافی اسکریپت – حلقه های تکرار

در آموزش های پیش، پیشرفت خوبی در یادگیری این زبان برنامه نویسی، داشته ایم. اکنون میخواهیم یکی از مهم ترین بحث ها (و در اکثر مواقع کار راه انداز ترین) یعنی حلقه های تکرار را بررسی کنیم. همچون سایر بخش های این زبان، این بخش هم کاملا از روبی گرفته شده است. در کافی اسکریپت، دو حلقه while و for داریم، که دقیقا عملکرد مشابه همین حلقه ها در روبی را دارند.

حلقه while

این حلقه، ساختار بسیار ساده ای دارد. در واقع، تمام عملیات این حلقه در بدنه انجام می شود و تنها یک شرط لازم دارد. ساختار کلی حلقه while در کافی اسکریپت به این شکل است :

n = 0
sum = 0
while n <= 10
  sum += n
  n += 1
  alert sum

همانطور که مشاهده میکنید، این حلقه یک شرط درست دریافت کرده، و تا زمانی که شرط درست باشد اجرا میشود و متغیر sum را با n جمع میزند. معادل این کد در جاوااسکریپت به این شکل است :

var n, sum;
 
n = 0;
 
sum = 0;
 
while (n <= 10) {
  sum += n;
  n += 1;
  alert(sum);
}

میتوان قطعه کد های پیشرفته تری نیز با while نوشت، یا درون برنامه های دیگر از آن استفاده کرد. برای مثال، برنامه زیر اعضای یک آرایه را به صورت پیام نشان میدهد :

a = [1, 2, 3, 4, 5]
n = 0 
 
while n < a.length
    alert a[n]
    n += 1

عملکرد کد فوق به این شکل است که تا زمانی که n از طول a کوچکتر است، اعضای a را چاپ میکند. معادل کد فوق در جاوااسکریپت به این شکل است :

var a, n;
 
a = [1, 2, 3, 4, 5];
 
n = 0;
 
while (n < a.length) {
  alert(a[n]);
  n += 1;
}

اکنون، با حلقه while آشنا شده اید. یادتان باشد دستورات منطقی مانند true و false هم میتوانند شرایط حلقه while باشند، که در صورت true بودن (یا همیشه راستگو بودن)، حلقه بی نهایت است و چنانچه false (یا همیشه دروغگو) باشد، حلقه اصلا اجرا نمی گردد.

پس از این که با حلقه while آشنا شدیم، نوبت میرسد به حلقه for.

حلقه for

ساختار for در کافی اسکریپت از روبی اقتباس شده است، اما حقیقتا کافی اسکریپت، این ساختار را بهتر پیاده سازی کرده است. بعنوان مثال، این قطعه کد را در نظر بگیرید :

a = [1, 2, 3, 4, 5]
 
alert b for b in a

عملکرد این قطعه کد به این شکل است که :

۱. اول تابعی که فراخوانی شده، متغیر را بعنوان آرگومان دریافت میکند.

۲. آن را به یکایک اعضای آرایه مقابلش نسبت میدهد.

۳. تابع را اجرا میکند.

در واقع عملکرد بسیار ساده ای دارد، که در جاوااسکریپت کد به این شکل نوشته می شود :

var a, b, i, len;
 
a = [1, 2, 3, 4, 5];
 
for (i = 0, len = a.length; i < len; i++) {
  b = a[i];
  alert(b);
}

در واقع ساختار حلقه for در زبان های روبی و کافی اسکریپت، همان foreach است.

تا اینجا، با بنیان و اساس برنامه نویسی در کافی اسکریپت آشنا شدیم. در آموزش های بعدی، سراغ مفاهیم پیشرفته تر این زبان خواهیم رفت .

Ruby_on_Rails.svg 1

به ریلز سلام کنید

در مقاله پیشین در مورد چگونگی نصب و راه اندازی ریلز صحبت کردیم. اکنون، زمان آن رسیده که اولین برنامه خود را در ریلز، بنویسیم. در این مقاله، شما با چگونگی ایجاد یک پروژه، ایجاد یک کنترلر، مسیردهی و نمایش پیام روی صفحه مرورگر، آشنا خواهید شد.

ایجاد یک پروژه جدید

در این آموزش، قصد داریم یک پروژه به اسم hello_rails بسازیم. جهت ساخت پروژه خود، از دستور زیر استفاده میکنیم :

rails new hello_rails

مراحل راه اندازی پروژه جدید ممکن است تا حدی طولانی شود (به دلیل راه اندازی دستور bundle install ). پس از ایجاد پروژه، پوشه ای به نام پروژه ایجاد خواهد شد. با دستور زیر، به داخل پوشه می رویم :

cd ./hello_rails

درون پوشه، پوشه های دیگری قرار دارند، که شامل پیکربندی ها، مسیرها، کنترلر ها و … هستند (در مقالات بعدی این پوشه ها را به تفصیل مورد بحث و بررسی قرار خواهیم داد).

ایجاد یک کنترلر جدید

با دستور زیر، یک کنترلر جدید به نام hello ایجاد می کنیم. توجه کنید که این hello قرار است صفحه ایندکس ما نیز باشد.

rails generate controller hello index

اکنون، بهتر است یک بار پروژه خود را تست کنیم :

rails server

بصورت پیشفرض، سرور ریلز روی پورت ۳۰۰۰ اجرا می گردد ، پس آدرس مورد نظر ما چنین خواهد بود :

localhost:3000

و شاهد چنین صفحه ای هستیم :
Screenshot from 2015-04-03 01:06:21

اکنون زمان آن رسیده تا به پیکربندی کنترلر ساخته شده بپردازیم.

نخستین برنامه شما، سلام به ریلز!

در واقع میخواهیم در این قسمت از آموزش، یک برنامه ایجاد کنیم که برای ما بنویسد Hello, Rails . برای این کار، ابتدا در مسیر زیر، کنترلر hello را به عنوان ریشه ( = root ) معرفی میکنیم :

config/routes.rb

این فایل را باز کرده، و این خطوط را به آن اضافه مینماییم :

Rails.application.routes.draw do
  get 'hello/index'
  root 'hello#index'
end

اکنون بار دیگر، سرور ریلز را اجرا میکنیم. حالا صفحه ای که ریلز به نشان میدهد این است :
Screenshot from 2015-04-03 01:12:17

همانگونه که مستحضرید، ریلز به شما می گوید که کجا میتوانید این ایندکس را ویرایش کنید. پوشه ویرایش فایل، اینجاست :

app/views/hello/index.html.erb

ما این پرونده را باز کرده، و درونش چنین مینویسیم :

<h1> Hello, Rails </h1>

اما میخواهیم، نام خودمان را به عنوان یک پارامتر به آدرس بدهیم. در واقع، مساله ما اینست که آدرس را به شکل :

localhost:3000/Muhammadreza

به برنامه بدهیم، و سپس پیام Hello, Muhammadreza را دریافت کنیم. اکنون، باید کمی با کنترلر ها کار کنیم. پس به پوشه :

app/controllers

رفته و فایل hello_controller.rb را باز کرده و به این شکل تغییرش میدهیم :

class HelloController < ApplicationController
  def index
	@name = params[:name]
  end
end

اکنون، دوباره باید در فایل routes.rb تغییری ایجاد کنیم ، فایل را باز کرده و چنین تغییرش میدهیم :

Rails.application.routes.draw do
  get 'hello/index'
  get '/:name' => 'hello#index'
  root 'hello#index'
end

اکنون این فایل را ذخیره کرده، در خط فرمان دستور زیر را اجرا میکنیم :

rake routes

این دستور، مسیرها را یک بار برای ما میسازد. پس از اینکه بدون هیچ خطایی این مرحله گذشت، کافیست به views رفته و فایل index.html.erb را این گونه ادیت کنیم :

<h1> Hello, <%= @name %> !</h1>

و سپس سرور را اجرا میکنیم.

اکنون باید آدرسی که پیش تر مد نظر داشتیم را به برنامه بدهیم، و نتیجه را ببینیم!

localhost:3000/Muhammadreza

و نتیجه چنین خواهد بود :
Screenshot from 2015-04-03 01:27:43تبریک می گوییم!

اکنون شما نخستین برنامه خود را با ریلز نوشته اید، و آماده اید تا برنامه های بیشتری را با ریلز، بسازید.

موفق باشید.

 

Ruby_on_Rails.svg 1

شروع به کار با ریلز – نصب و راه اندازی

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

قدم اول : نصب و راه اندازی روبی

نصب روبی، چندین روش مختلف دارد. یکی از بهترین روش ها برای کاربران لینوکس، استفاده از مخازن است. در توزیع های دبیان بیس با چنین دستوری میتوانید روبی را نصب کنید :

sudo apt-get install ruby

 

همچنین، میتوانید از RVM نیز برای نصب کردن روبی استفاده نمایید. برای سیستم عامل ویندوز نیز، نصب از طریق Rails Installer توسط وبگاه زبان روبی پیشنهاد شده است.

پیش‌نیاز ها

قبل از هر اقدامی، باید نرم افزارهای مورد نیاز توسط ریلز را روی سیستم عامل خود نصب کنید. تنها پیش نیازی که ریلز دارد، Node.js است. شما میتوانید این کتابخانه را از وبسایتش دانلود کرده و سپس نصب کنید، و یا با دستور زیر در ترمینال :

sudo apt-get install nodejs

 

نصب ریلز

اکنون، زمان نصب rails رسیده است. ریلز باید از طریق جم های روبی، و از طریق CMD در ویندوز و یا ترمینال لینوکس نصب گردد. جهت نصب این برنامه کافیست دستور زیر را در ترمینال و یا CMD اجرا کنید :

gem install rails

برای نصب در لینوکس، شما باید از sudo نیز استفاده کنید (تا دستور نصب با دسترسی ریشه اجرا گردد).

شروع کار با ریلز

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