當使用rails new appname產生Rails應用後,我們可以通過tree來查看Rails應用的目錄結構:
目錄結構
應用程式目錄下會有app、config、db、doc、lib、log、public、script、test、tmp和vendor等11個目錄和config.ru、Gemfile、Gemfile.lock、Rakefile、README.rdoc等5個檔案。
目錄在稍後會一一解釋,先看一下app目錄下的檔案:
config.ru 用來啟動Rails程式的Rack設定檔案
require ::File.expand_path('../config/environment', __FILE__)run Myapps::Application
Gemfile設定Rails程式所依賴的Gems (一旦用bundle install安裝後,會產生Gemfile.lock)
source 'https://ruby.taobao.org/'gem 'rails', '3.2.1'gem 'sqlite3'# Gems used only for assets and not required# in production environments by default.group :assets do gem 'sass-rails', '~> 3.2.3' gem 'coffee-rails', '~> 3.2.1' gem 'uglifier', '>= 1.0.3'endgem 'jquery-rails'gem ... ...
Rakefile 用來載入可以被終端執行的Rake任務
<!--more-->
下面是用tree命令查看,所顯示的目錄和檔案結構:
.├── app│ ├── assets│ │ ├── images│ │ │ └── rails.png│ │ ├── javascripts│ │ │ └── application.js│ │ └── stylesheets│ │ └── application.css│ ├── controllers│ │ └── application_controller.rb│ ├── helpers│ │ └── application_helper.rb│ ├── mailers│ ├── models│ └── views│ └── layouts│ └── application.html.erb├── config│ ├── application.rb│ ├── boot.rb│ ├── database.yml│ ├── environment.rb│ ├── environments│ │ ├── development.rb│ │ ├── production.rb│ │ └── test.rb│ ├── initializers│ │ ├── backtrace_silencers.rb│ │ ├── inflections.rb│ │ ├── mime_types.rb│ │ ├── secret_token.rb│ │ ├── session_store.rb│ │ └── wrap_parameters.rb│ ├── locales│ │ └── en.yml│ └── routes.rb├── config.ru├── db│ └── seeds.rb├── doc│ └── README_FOR_APP├── Gemfile├── lib│ ├── assets│ └── tasks├── log├── public│ ├── 404.html│ ├── 422.html│ ├── 500.html│ ├── favicon.ico│ ├── index.html│ └── robots.txt├── Rakefile├── README.rdoc├── script│ └── rails├── test│ ├── fixtures│ ├── functional│ ├── integration│ ├── performance│ │ └── browsing_test.rb│ ├── test_helper.rb│ └── unit├── tmp│ └── cache│ └── assets└── vendor ├── assets │ ├── javascripts │ └── stylesheets └── plugins
應用目錄(app/)
app目錄是Rails程式的主目錄,不同子目錄分別存放了模型 Models (M)、控制器 Controllersw (C)、視圖 Views (V)及Mailers、Helpers和Assests等文檔。
模型-控制器-視圖
分別存放模型、控制器和視圖。其中,模型統一存放在app/models目錄下,控制器統一存放在app/controllers目錄下(可以使用目錄進一步組織控制器,例如cpanel目錄下用於存放管理後台相關的控制器),視圖存放在app/views目錄下,視圖模型存放在app/view/layouts目錄下,預設為applicaiton.html.erb。
Assets靜態檔案
Assets靜態檔案存放在app/assets目錄下,分別為app/assets/images、app/assets/stylesheets、app/assets/javascripts目錄。
Helper
Helper是一些在視圖中可以使用的小方法,用來產生較複雜的HTML。預設的Helper檔案名稱對應控制器,但不強制要求,在任意一個Helper檔案中定義的方法,都可以在任何視圖中使用。
設定檔目錄(config/)
雖然Rails遵循“約定優於配置”的原則,但仍有一些需要設定的地方。在設定檔目錄下,會存放應用程式設定檔案application.rb、資料庫設定檔案database.yml、路由設定檔案routes.rb、多重環境設定config/environments目錄、其它初始設定檔案config/initializers。
Rails啟動應用程式設定
啟動Rails程式(例如rails console或rails server),會執行以下三個文檔
boot.rb 載入Bundler環境,這個檔案由Rails自動產生,不需要修改;
require 'rubygems'# Set up gems listed in the Gemfile.ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
application.rb 載入Rails gems和依賴的其它gems,接著設定Rails程式;
require File.expand_path('../boot', __FILE__)
require 'rails/all'if defined?(Bundler) # If you precompile assets before deploying to production, use this line Bundler.require(*Rails.groups(:assets => %w(development test))) # If you want your assets lazily compiled in production, use this line # Bundler.require(:default, :assets, Rails.env)endmodule Myapps class Application < Rails::Application # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers # ... ... # Configure the default encoding used in templates for Ruby 1.9. config.encoding = "utf-8" # Configure sensitive parameters which will be filtered from the log file. config.filter_parameters += [:password] # ... ... # Enable the asset pipeline config.assets.enabled = true # Version of your assets, change this if you want to expire all your assets config.assets.version = '1.0' endendenvironment.rb 執行所有啟動程式(initializers),這個檔案同樣由Rails產生,不需要修改。# Load the rails applicationrequire File.expand_path('../application', __FILE__)# Initialize the rails applicationMyapps::Application.initialize!
初始設定檔案(initializers)
由environment.rb調用,系統預設的初始設定檔案有backtrace_silencers.rb、inflections.rb、mime_types.rb、secret_token.rb、session_store.rb和wrap_parameters.rb等6個,分別對應的用途是:選擇性移動異常追蹤、單複數轉換、mime_types、加密cookies資訊的token、預設session儲存以及參數封裝等。
###資料庫儲存目錄(db/)
###程式協助文檔(doc/)
###共用類或模組檔案(lib/)
一些共用的類或模組可以存放在該目錄。另外,Rake的任務,可存放在lib/tasks目錄下。
###日誌目錄(log/)
###公用檔案目錄(public/)
對於web伺服器來說,可以直接存取的檔案目錄。可以用於存放通用的images、stylesheets和javascripts (Rails 2.x)。
###Rails指令檔(script/)
###測試檔案目錄(test/)
用於存放單元測試、功能測試及整合測試檔案。
###臨時檔案目錄(tmp/)
###第三方外掛程式目錄(vendor/)
在使用bundler安裝gems外掛程式時,也可以選擇安裝在該目錄下。例如bundle install --path vendor/bundle。