2010-6-28 Ruby on Rails Webアプリケーションフレームワーク概要

来源:互联网 发布:qt编程快速入门 鲍忠贵 编辑:程序博客网 时间:2024/05/21 10:49

-----------------
1. REST设计原理
-----------------
REST:REprisentational State Transfer,由HTTP式样作者之一在其博士论文中提出的一个设计原理。
运用在Ruby on Rails中是指通过HTTP的get/post方法和URL来表现操作及其操作的对象。

光是看这个概念上的解释还是不够明朗。那么,看看下面这个例子。
比如要表示“删除id为138的文章”这样一个操作,一般的HTTP请求如下:

POST /delete_article.cgi?article_id=138
这是利用CGI构筑的Web页面中典型的HTTP方法和URL的组合,但这并不是REST的原则。
/delete_article.cgi?article_id=138并不是资源(Action对象),而是指位于Sever上名为delete_article.cgi的程序及其传递给它的参数。
这种URL的命名是从Action内部处理来考虑的。
再看看运用REST原理的例子:
DELETE /acticle/138
/acticle/138这样的URL看来,操作(delete)和对象(ID为138的对象)一目了然,这更加符合人的理解思维。


-----------------
2. リソースの登録
-----------------
config/routes.rbファイルの中に
map.resources :cards
という記述は、Cardsというリソースをアプリケーションに登録している意味を表す。
generateでscaffoldを作成すると、自動的にこのファイルに書き換える。
しかし、手動でコントローラとビューを作成しつつRESTfulなURLを扱うためには、自分がoutes.rbファイルにリソースの名前を追加する必要がある。

------------------------
3. リソースとMVCの関連
------------------------
keyakiアプリでは、cardsというリソースが登録され、それへのリクエストをCardsコントローラが受け、Cardモデルを通じてデータベースのCardsテーブルにアクセスして結果を返している。
このように特定の名前を通じて一群のリソース、コントローラ、モデル、データベーステーブルが結びつくことはよくありますが、常にそうであるとは限らない。
http://localhost:3000/cards/1をアクセスするとき、Cardsリソースへのリクエストを処理するのはどのコントローラでしょうか。
map.resources :cardsの場合、同じ名前のCardsコントローラですけど、もし
>script/generate controller Entries index show
のように新しいコントローラEntriesを生成して、そしてconfig/routes.rbを次のように書き換えたら
map.resources :cards, :controller => :entries
http://localhost:3000/cards/1でアクセスすると、例外になる。
この例で、リソースとコントローラの役割を表している。
リソースはアプリと外部世界をつなぐインターフェースであり、コントローラはアプリ内部のオブジェクトです。
実は同じものを扱っているとしても、名前が同じになるとは限らない。

リソース ― アプリを使う人の観点から分かる名前
コントローラ ― アプリを作る人の観点から分かる名前

同様に、コントローラとモデルの名前が異なることも、モデルとデータベーステーブルの名前が異なることもあります。
名前を変える必要ないが、本質的には別々の存在であることを念頭におきながら進めましょう。

-------------------------------
4. Ruby on Railsのコンポーネント
-------------------------------
Ruby on Railsは、次の5つのRubyGemsパッケージに依存しています。

  • ActionMailer
  • ActionPack
  • ActiveRecord
  • ActiveSupport
  • ActiveResource


-------------
5. 命名規則
-------------
通則
DBテーブル
DBのカラム名
主キーと外部キー
コントローラ
ヘルパー
ファイル名
メソッド名/変数名

設定より規約(Convention over Configuration)

以前做CakePHP项目的时候,已经充分体会了这种设计思想。
自己不用像struts去写繁冗的配置文件,而框架按照命名自动去匹配各种文件和项目之间的关联。
刚开始有些不习惯,但是一旦发现其便利性,便可放心地把这些事情交给框架,把自己从以前struts-config.xml的纷乱细节中解救出来,实在是一大轻松。

(以下解释纯属完全翻译。。。)
Ruby on Rails采用了Convention over Configuration的设计哲学。
框架对软件设计中各种各样的设置项目采取缺省值,这样开发者必须采取意识的场合就减少了。
Rails的数据库表和类的命名就是这种设计哲学的具体化。
开发者只要遵循这些命名规则,就不用特意去定义还有设置那些可以机械类推的名称。
其结果,代码的记述量减少了,产生误会的机会也减少了。
另外,通过小组共同开发一个项目的时候,开发者之间的产生误解的可能性也减少了。
这种命名规则的存在并不是剥夺开发者自身的自由。如果有必要,开发者也可以违反规则去进行设定。


-------------------------------
6. Railsアプリのディレクト構成
-------------------------------
省略...

----------
7. 環境
----------
Railsの初期状態でdevelopment(開発環境)、test(テスト環境)、production(本番環境)の3つの環境があります。
それぞれの環境の設定ファイル:
config/environmen/development.rb
config/environmen/test.rb
config/environmen/production.rb

それぞれのデータベースの環境設定
config/database.yml

現在環境をソースコードの中で知るには定数RAILS_ENVを参照する。例えば、
if RAILS_ENV == 'production'
    @background_color = '#fff'
else
    @background_color = '#ccc'
end

production環境で動作させたい場合、-eに環境名を指定します。
>ruby script/server -e production



原创粉丝点击