分享 初学者连载系列之十一:Rails 应用目录结构

kevinhua · 2012年04月06日 · 最后由 gengruifeng 回复于 2016年11月16日 · 12561 次阅读

系列文章原载于自己的博客,TOPI.CO (http://topi.co) ,某天不小心就 push 错啦,懒得从头再来,上传到 Ruby-China 来,一是方便自己回顾,另外也方便跟我一样的初学者

当使用rails new appname生成 Rails 应用后,我们可以通过tree来查看 Rails 应用的目录结构:

###目录结构

应用程序目录下会有appconfigdbdocliblogpublicscripttesttmpvendor等 11 个目录和config.ruGemfileGemfile.lockRakefileREADME.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'
end

gem 'jquery-rails'
gem ... ...

  • Rakefile 用来载入可以被终端执行的 Rake 任务

下面是用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/imagesapp/assets/stylesheetsapp/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)
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

  • environment.rb 执行所有启动程序 (initializers),这个文件同样由 Rails 产生,不需要修改。
# Load the rails application
require File.expand_path('../application', __FILE__)

# Initialize the rails application
Myapps::Application.initialize!

  • 初始设置文件 (initializers)

由 environment.rb 调用,系统默认的初始设置文件有backtrace_silencers.rbinflections.rbmime_types.rbsecret_token.rbsession_store.rbwrap_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

正是很多个对 Ruby 如此执着的 XD, 才让这个社区变得很可爱。

顶一个。

这文不错,初学者要看看。

#1 楼 @zw963 同意,赞一个

确实初学者要看看。支持

需要 登录 后方可回复, 如果你还没有账号请 注册新账号