系列文章原载于自己的博客,TOPI.CO (http://topi.co) ,某天不小心就 push 错啦,懒得从头再来,上传到 Ruby-China 来,一是方便自己回顾,另外也方便跟我一样的初学者
当使用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 目录下的文件:
require ::File.expand_path('../config/environment', __FILE__)
run Myapps::Application
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'
end
gem 'jquery-rails'
gem ... ...
下面是用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),会执行以下三个文档
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'])
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)
end
module 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'
end
end
# Load the rails application
require File.expand_path('../application', __FILE__)
# Initialize the rails application
Myapps::Application.initialize!
由 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
。