当使用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' end gem '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) 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.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。
一个基本的 HTML5 Boilerplate 站点,最初的目录结构就像这样: . ├── css │ ├── main.css │ └── normalize.css ├── doc ├── img ├── js │ ├── main.js │ ├── plugins.js │ └── vendor │ ├── jquery.min.js │ └──
问题内容: 我已遵循Go网站上的“ 编写Web应用程序”教程,并且开始编写自己的Web应用程序。我还阅读了《如何编写Go代码》的开始,并尝试使用相同的工作区结构来组织我的代码。 我正在编写一个名为mygosite的简单Web应用程序,该应用程序通过呈现单个模板来处理所有请求。运行之后,我的目录结构现在看起来像这样: 在我的代码中,我指的是带有path的模板。运行时,应用程序找不到源模板,因为它位于
Rust 是多范式语言,当然支持命令式编程风格。本章讲解 Rust 中的几种基本程序结构。 注释 条件 循环
小程序包含一个描述整体程序的 app 和多个描述各自页面的 page。 一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下: 文件 必需 作用 app.js 是 小程序逻辑 app.json 是 小程序公共配置 app.ftss 否 小程序公共样式表 一个小程序页面由四个文件组成,分别是: 文件类型 必需 作用 js 是 页面逻辑 fxml 是 页面结构 json 否 页面配置 ftss
程序目录结构 SpeedPHP框架的目录结构比较简单,秉承了SpeedPHP快速学习的理念。 新版的sp框架,由于加入了mudules开发模式,所以在目录结构方面,趋于更精炼,更固定化。 3.1版及之前的sp框架,目录结构是可以通过配置进行修改。 但是新版的情况不一样了。 之所以我们要用固定的目录结构,理由如下: 加入mudules开发模式,使得多个应用可以集成到一个程序里面,也就是传统的模块开发
6.2 程序的基本结构 在学习高级语言程序设计时,我们知道了程序的三大主要结构:顺序结构、分支结构和循环结构。在汇编语言的源程序也同样有此三大结构,所不同的是它们的表现形式不同。用高级语言编写程序时,由于不使用“转移语句”而使这三种结构清晰明了。 但在汇编语言的源程序中,很难不使用“转移语句”(除非是一些只有简单功能的程序),有时甚至会有各种各样的“转移语句”。由于存在这些转移语句,就使得:汇编语
SystemTap支持在处理程序中使用一些基本的结构。它们的语法基本上类似于C或awk。了解最常用的一些结构,有助于你写出更清晰的SystemTap脚本。 变量 处理程序里面当然可以使用变量,你所需的不过是给它取个好名字,把函数或表达式的值赋给它,然后就可以使用它了。SystemTap可以自动判定变量的类型。举个例子,如果你用gettimeofday_s()给变量foo赋值,那么foo就是数值类型
for while loop break 与 continue label for for 语句用于遍历一个迭代器。 for var in iterator { code } Rust 迭代器返回一系列的元素,每个元素是循环中的一次重复。然后它的值与 var 绑定,它在循环体中有效。每当循环体执行完后,我们从迭代器中取出下一个值,然后我们再重复一遍。当迭代器中不再有值时,for 循环结束。