Ruby on Rails所构建的应用程序基本目录结构总结
当使用railsnewappname生成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__) runMyapps::Application
Gemfile设置Rails程序所依赖的Gems(一旦用bundleinstall安装后,会生成Gemfile.lock)
source'https://ruby.taobao.org/' gem'rails','3.2.1' gem'sqlite3' #Gemsusedonlyforassetsandnotrequired #inproductionenvironmentsbydefault. group:assetsdo 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程序(例如railsconsole或railsserver),会执行以下三个文档
boot.rb载入Bundler环境,这个文件由Rails自动产生,不需要修改;
require'rubygems' #SetupgemslistedintheGemfile. ENV['BUNDLE_GEMFILE']||=File.expand_path('../../Gemfile',__FILE__) require'bundler/setup'ifFile.exists?(ENV['BUNDLE_GEMFILE'])
application.rb载入Railsgems和依赖的其它gems,接着设定Rails程序;
requireFile.expand_path('../boot',__FILE__)
require'rails/all' ifdefined?(Bundler) #Ifyouprecompileassetsbeforedeployingtoproduction,usethisline Bundler.require(*Rails.groups(:assets=>%w(developmenttest))) #Ifyouwantyourassetslazilycompiledinproduction,usethisline #Bundler.require(:default,:assets,Rails.env) end moduleMyapps classApplication<Rails::Application #Settingsinconfig/environments/*takeprecedenceoverthosespecifiedhere. #Applicationconfigurationshouldgointofilesinconfig/initializers #...... #ConfigurethedefaultencodingusedintemplatesforRuby1.9. config.encoding="utf-8" #Configuresensitiveparameterswhichwillbefilteredfromthelogfile. config.filter_parameters+=[:password] #...... #Enabletheassetpipeline config.assets.enabled=true #Versionofyourassets,changethisifyouwanttoexpireallyourassets config.assets.version='1.0' end end environment.rb执行所有启动程序(initializers),这个文件同样由Rails产生,不需要修改。 #Loadtherailsapplication requireFile.expand_path('../application',__FILE__) #Initializetherailsapplication 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(Rails2.x)。
###Rails脚本文件(script/)
###测试文件目录(test/)
用于存放单元测试、功能测试及整合测试文件。
###临时文件目录(tmp/)
###第三方插件目录(vendor/)
在使用bundler安装gems插件时,也可以选择安装在该目录下。例如bundleinstall--pathvendor/bundle。