侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Ruby on Rails所构建的应用程序基本目录结构总结

技术  /  管理员 发布于 6年前   306

当使用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。


  • 上一条:
    解析xHTML源码的DLL组件AngleSharp介绍
    下一条:
    Perl语法中Perl运算符用法指南
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 2024.07.09日OpenAI将终止对中国等国家和地区API服务(0个评论)
    • 2024/6/9最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(1个评论)
    • 国外服务器实现api.openai.com反代nginx配置(0个评论)
    • 2024/4/28最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(1个评论)
    • 近期文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2017-09
    • 2018-01
    • 2018-07
    • 2018-08
    • 2018-09
    • 2018-12
    • 2019-01
    • 2019-02
    • 2019-03
    • 2019-04
    • 2019-05
    • 2019-06
    • 2019-07
    • 2019-08
    • 2019-09
    • 2019-10
    • 2019-11
    • 2019-12
    • 2020-01
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-12
    • 2024-02
    • 2024-04
    • 2024-05
    • 2024-06
    • 2025-02
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客