rails 存储过程lib目录存什么东西

旗下栏目:
您现在的位置: >
Ruby on Rails所构建的应用程序基本目录结构总结
所属栏目:
发布时间:
| 小编:豆豆
当使用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::ApplicationGemfile设置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'
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
│&&└──&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目录。HelperHelper是一些在视图中可以使用的小方法,用来产生较复杂的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)
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'
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。
相关阅读:
看过本文的人还看过
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。& rails的框架结构与常用配置
rails的框架结构与常用配置
rails的框架结构与常用配置
(一) rails的框架结构
rails的三种模式
*. 开发模式 development
*. 测试模式 test
*. 生产模式 production
config/environments/development.rb 配置文件 config/environments/test.rb 配置文件 config/environments/production.rb 配置文件
开发环境里注重代码的调试运行,测试提供了一种可以重复的环境,且产品环境下当然就注重了代码运行的性能问题了
rails MVC 模式
MVC软件架构模式
Model(模型层): 处理数据及业务逻辑
Controller(控制层): 处理用户请求及应用逻辑
View(视图层): 显示用户界面
rails 的MVC
ActiveRecord
实现对数据库的抽象,ORM(bject/Relation Mapping) 对象-关系映射模型
ActionController
决定了如何处理用户的请求, 并生成响应
ActionView
显示用户的界面
rails 的模块
actionpack : 是一个独立的gem,包括以下三部分,是MVC 的VC层
– action_controller
– action_dispatch : 处理web请求的路由等
– action_view
activemodel
activerecord
activeresource
activesupport : 工具类和ruby标准库的扩展
actionmailer : 收发邮件模块
railties :是rails framework的核心,用来提供各种回调方法以及扩展,或者修改初始化的process. 实际上每个rails组件(ActionMailer,Action Controller)都是一个railtie, 每个组件都有自己的初始化代码,这样rails就不用去专门把初始化工作都自己来做,只要在正确的时候调用各组件的初始化代码就可以了。
rails 加载顺序
boot.rb: 配置Bundler以及加载路径
application.rb: 根据不同的启动环境(Rails.env)加载不同的rails gems, 配置应用程序
environment.rb: 加载所有的initializers
这三个文件都在启动整个rails环境时加载。
require ‘config/boot.rb’ 配置Bundler以及加载路径
载入相关的railties和engines
定义项目 Define Rails.application as “class MyApp::Application & Rails::Application
Run config.before_configuration callbacks
Load config/environments/ENV.rb
Run config.before_initialize callbacks
Run Railtie#initializer defined by railties, engines and application. its config/initializers/* files
Custom Railtie#initializers added by railties, engines and applications are executed ## 载入 相关的加载项 autoload_paths
Build the middleware stack and run to_prepare callbacks
Run config.before_eager_load and eager_load if cache classes is true
Run config.after_initialize callbacks
源码文件: /usr/local/rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.11/lib/rails/application.rb
使用rack构建rails中间件 1). Rack: rack 提供了用ruby开发web应用的一个接口。
规范:接受一个env, 返回http的全部,(status, header, body)
2). rack 和 web framework 中间件middleware
查看rails的middleware: rake middleware
use ActionDispatch::Static
use Rack::Lock
use ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x007f926db35978
use Rack::Runtime
use Rack::MethodOverride
use ActionDispatch::RequestId
use Rails::Rack::Logger
use ActionDispatch::ShowExceptions
use ActionDispatch::DebugExceptions
use ActionDispatch::RemoteIp
use ActionDispatch::Reloader
use ActionDispatch::Callbacks
use ActiveRecord::ConnectionAdapters::ConnectionManagement
use ActiveRecord::QueryCache
use ActionDispatch::Cookies
use ActionDispatch::Session::CookieStore
use ActionDispatch::Flash
use ActionDispatch::ParamsParser
use ActionDispatch::Head
use Rack::ConditionalGet
use Rack::ETag
use ActionDispatch::BestStandardsSupport
run Demo::Application.routes
config.middleware.delete(middleware) 删除中间件 Railtie为所有rails组件提供了和Rails整合的接口,使他们可以定义自己的初始化内容,可以有自己的配置。 Engine继承于Railtie, 提供了一个功能最小化的Rails文档结构,Application继承于Engine, 在Engine的基础上定义了一个完整Rails所需要的Initializers和middleware,同时在启动时负责加载Rails程序中其他组件的所有Initializers。
(二).rails常用配置
rails_config
gem “rails_config”
rails g rails_config:install
config/initializers/rails_config.rb
config/settings.yml & config/settings.local.yml & config/environments/development.local.yml
config/settings.yml & config/environments/development.yml & config/environments/development.local.yml
Settings.reload! 修改settings文件后重载
application.rb 配置文件, development,test,production三种环境都会加载
(1). config.root
(2) config.autoload_paths += %W(#{config.root}/lib #{config.root}/others )
接受一个路径数组, Rails将会自动加载这些路径内的常量. 默认是app目录下的所有目录.
(3) 一般没用
config.plugins = [ :exception_notification, :ssl_requirement, :all ]
正常情况,rails会按照字母顺序加载插件,但如果你遇到了问题,需要改变加载顺序,上面的配置代码可以完成这一点。 折800好像没有用插件机制
插件的安装:rails plugin install git:///newrelic/rpm.git # 回到vendor/plugins下面 Rails3以后,已经不建议使用插件。而应该把插件做成 gem 来安装
(3) config.filter_parameters += [:password]
从日志中移除password的参数,用”[FILTERED]” 替代,出于安全考虑
(4) config.time_zone
设置应用程序 Active Record 可用的默认时区
rake time:zones:all 运行可以知道具体的时区设置
(5) config.i18n.default_locale
设置某个使用 i18n 应用程序的默认本地语言环境
config.i18n.load_path
设置 Rails 用来搜索本地化文件的路径。
(6) config.encoding
设置整个应用程序的编码. 默认是 UTF-8
(7) config.active_support.escape_html_entities_in_json
设置在 JSON 序列化中是否剔除 HTML 实体。默认为 true
source: activesupport-3.2.11/lib/active_support/json/encoding.rb
ActiveSupport::escape_html_entities_in_json = true 好像没效果~
(10) config.active_record.schema_format = :sql
schema的格式 默认是ruby格式, sql为纯sql的形式
(11) config.active_record.whitelist_attributes = true
将会创建一个空白的白名单,这个名单包含了在批量赋值 (mass assignment) 防护下可进行批量赋值的模型属性,取消则失去防护效果
rails 4 好像没得这个问题了, config.active_record.whitelist_attributes 设定被移除了,预设改为可以设定大量赋值(Mass assignment)
(12) config.assets.enabled = true
控制是否使用 asset pipeline 可以通过命令:rake assets:clean 清除编译后的静态文件 rake assets:precompile 编译静态文件
config/environments/development.rb 文件
(1) config.cache_classes = false
开发模式的环境配置为config.cache_classes = fasle 每次都会重新加载类 生产模式下设置为true,每次请求过来不会重新加载类
(2) config.whiny_nils = true
如果调用的nil.abc 会抛出rails的异常 eg: Called id for nil, which would mistakenly be 4 — if you really wanted the id of nil, use object_id
config.whiny_nils = false
抛出普通异常 eg: undefined method `id’ for nil:NilClass rails 4 好像已经去掉这个配置
(3) config.consider_all_requests_local = true
如果为 true 则任何携带详细调试信息的错误信息都会被添加到 HTTP 回应(response) 里 生产模式下设置为 false
(4) config.action_controller.perform_caching
配置应用程序是否在controller和views里进行缓存。因为Rails.cache, 开发模式默认关闭,在生产模式默认开启. 注:默认的缓存模式是文件模式,tmp/cache/* 如果需要改缓存模式 config.action_controller.cache_store 针对action缓存和片段缓存 config.cache_store 配置Rails缓存要使用什么缓存存储 页面缓存
(5) config.action_mailer.raise_delivery_errors
发送邮件失败时是否抛出异常,默认true 开发false
(6) config.active_support.deprecation :log, :notify, :stderr
可选的设置器,它能配置 Rails 废弃警告的动作。
(7) config.action_dispatch.best_standards_support = :builtin
(8) config.active_record.mass_assignment_sanitizer = :strict
将会判断 Rails 中对批量赋值(mass assignment)清理的严格程度。默认为 :strict. 在这个模式下,调用 create 或者 update_attributes 并对任何不是attr_accessible的属性进行批量赋值的话,将会抛出一个异常。如果设置这个选项为 :logger的话,只会将某个属性被赋值时的异常信息打印到日志文件,并不抛出异常。
(9) config.active_record.auto_explain_threshold_in_seconds = 0.5
配置自动执行(sql指令)EXPLAIN的临界值。所有逼近临界值的查询会把它们的查询计划进行日志记录。在开发模式下默认是 0.5。
(10) press 标记是否压缩已经编译好的资源
config.assets.debug 不合并压缩资源
production.rb
(1) 不用更改 config.serve_static_assets = false
配置rails自己处理静态资源,开发模式下没有必要,因为我们已经有nginx了,我们一般的做法是将静态资源放到public下面,然后通过nginx去处理这些静态资源
(2) press = true
标记是否压缩已经编译好的资源 (这玩意没用过)
(3) pile = false
可以用于让Sprockets 在生产环境即时执行编译。一般不建议开启,因为编译的时候会增加服务器负担,对于一个线上环境是不可靠的
(4) config.assets.digest = true
使资源的名字使用 MD5 指纹,
(5) config.assets.manifest = YOUR_PATH
指定资源预编译器的待编译列表文件所在目录完整的路径。 默认使用 config.assets.prefix
(6) config.force_ssl = true
强制所有的请求使用ActionDispath::SSL中间件走 HTTPS 协议.
(7) config.log_level 定义日志的级别
production模式为:info, :debug最大
(8) config.action_controller.asset_host = “”
设置资源主机。当CDNs被用于资源主机而不是应用程序自己处理资源时很有用.
(9) config.assets.precompile
让你指定其它(application.css 和 application.js以外的)资源,这些资源会在 rake assets:precompile 执行时被预编译.
(10) config.i18n.fallbacks = true
当I18n.default_locale 没有找到时会在所有的locals下面去找
rails安全性
rails configure详细解析
This entry was posted in
Designed by当前位置: →
→ Ruby On Rail 目录结构
Ruby On Rail 目录结构
& 作者及来源: AllenWang.NET - 博客园 &
&收藏到→_→:
摘要: Ruby On Rail 目录结构
"Ruby On Rail 目录结构"::
引自: ruby on rails开发从头来(windows)(三十一)- rails的目录结构
&&&&&&&&& ruby on rails项目文件目录结构和环境设置
├─app&&&&&&&&&&&&&&&&&
│&├─controllers&&&&&&&&&&&&&
│&├─helpers
│&├─models
│&└─views
│&&&&& ├─admin
│&&&&& ├─layouts
│&&&&& ├─login
│&&&&& ├─search
│&&&&& └─store
├─components
├─config
│&└─environments
├─coverage
│&└─migrate
│&└─app
│ &&&&&├─classes
│&&&&& └─files
│&&&&&&&&& ├─app
│&&&&&&&&& │&├─controllers
│&&&&&&&&& │&├─helpers
│&&&&&&&&& │&└─models
│&&&&&&&&& └─doc
│&└─tasks
├─nbproject
│&└─private
├─public
│&├─images
│&├─javascripts
│&├─stylesheets
│&├─404.html
│&└─robots.txt
├─script
│&├─performance
│&└─process
│&├─fixtures
│&│&└─performance
│&├─functional
│&├─integration
│&├─mocks
│&│&├─development
│&│&└─test
│&├─performance
│&└─unit
│&&&&& └─performance
│&├─cache
│&├─pids
│&├─sessions
│&└─sockets
└─vendor
&&&└─plugins
下面来解释这些目录的含义
app:model,view,controller都在这个目录下,对应的有子目录,我们大部分的工作都在这里进行。
components:可复用的组件都放在这里。
config: 链接等的配置信息。
coverage:这个不是rails自己的目录,是我们在前面测试时安装的测试覆盖率的目录。
db:存放db结构(schema)的信息。
doc:存放文档,我们前面生成过一次depot项目的文档,都在这里面。
lib:存放共享的代码。
log:我们的项目的日志信息,里面有development.log,production.log,server.log,test.log,我们在开发时的信息都写在development.log里,而测试时的log都写在test.log里。
nbproject:这个不是rails的目录,是我们前面用netbeans创建depot项目的时候生成的。
public:可以从web访问的目录,如果我们在浏览器的地址栏里直接输入:http://localhost:3003/那么看到的就是这里的index.html页面。另外,我们前面也把一些css文件放在了这里的stylesheet目录里。
script:rails用到的脚本,有一些我们可能已经用过了,比如:generate,process,performance。
test:model测试,功能测试,测试此文来自: 马开东博客
转载请注明出处 网址:
用的数据等等,我们前面在这个目录下已经写了很多代码了。
server:运行webrick,我们前面在depot项目里已经使用了。
vendor:存放第三方的代码。
下面再主要说说script目录下的脚本,主要的脚本有:
benchmarker:对比多个 的性能。
breakpointer:断点,能够让你和rails程序交互。
3) console:让你能够使用irb命令和rails程序交互。
4) destroy:移除generate生成的文件。
5) generate:代码生成器,能够生成controller,mailer,model,web服务等。你还可以从rails的网站上下载一些扩展的生成器模块。
6) profiler:对你的程序进行。
7) runner:可以使我们代码中的 脱离web的上下文环境来运行。
搜索此文相关文章:
On Rail 目录结构此文来自: 马开东博客
网址: 站长QQ
Ruby On Rail 目录结构_博客园相关文章
博客园_总排行榜
博客园_最新
博客园_月排行榜
博客园_周排行榜
博客园_日排行榜悲剧,/lib 目录下的 rb 文件直接修改,不生效? · Ruby China
只好关了服务重启。
可以先放到 models 目录,调试好以后在放回 lib 目录
恩,目前是这样做。。
我还以为是我在WINDOWS下的原因
不对,貌似也不行。
我文件里面放的是module模块。。
楼上正解。
lz 应该说一下,是如何加载lib目录下的文件的。
在Rails里有三种加载源码的方式:
使用 require ,这个是ruby的方式。
基于 AcitiveSupport 的 const_missing 机制。如果找不到某个常量(类 或者 模块),就会根据其名称,去加载对应的文件,同时添加到一个已经加载的常量的列表里。比如在代码里使用了 Abc::Def,那么 Rails 就会尝试加载 abc/def.rb 这个文件。文件的搜索路径在 ActiveSupport::Dependencies.autoload_paths 中,可以在 application.rb 中用 config.autoload_paths 中添加。Rails-3 默认没有 'lib' 目录哦。所以默认情况下,使用这种方式加载不了。
使用 require_dependency 加载。
(load 也算一种,但似乎很少用)
使用第一种方式,应用启动后,只加载一次。使用后两种,在development 模式下,每次处理新的请求,都会重新加载。
但是要注意,后两种加载的时候,会把源码所在的文件展开为绝对路径,再去 require 。所以,使用Ruby-1.8.7 的时候要注意了:对于同一个文件,使用不同路径 require文件,Ruby-1.8.7 会加载多次。所以项目中应该统一使用一种方式加载。
另外:如果想让 ActiveSupport::Dependencies.autoload_paths 中的某个目录的子目录只加载一次,可以添加到 config.autoload_once_paths 中。
LS讲的相当详细,感谢
这种答案没有 reputation 真是可惜了.. 这个系统可以做..
多谢大家!
饿,还是有问题。大家看看:
首先我在lib目录下放置rb文件,里面是个 module 模块,命名为M
其次在application.rb中加上
config.autoload_paths += %W(#{config.root}/lib)
最后再controler文件中添加,这个时候问题来了
按六楼说,如果是require,那么只会载入一次,那意味着不能用require;所以直接写M.xxx, 结果提示找不到,只好加上require,正确。但是改M的代码,仍然不能即时生效。
模块是不是定义在其他模块内?文件名是什么?
如果模块的 全名是 M ,那么文件名 就是 m.rb 。
我还是习惯把扩展的代码放在 config/initializers 文件夹里下,Rails 启动的时候自动加载,不过如果修改了文件,要重启应用。
测试了一下, 第二种方法修改lib下的文件后扔需重启服务器才能生效, 用第三种方法require_dependency 则可以不重启生效
你能确定你要加载的文件,都是用第二种方法加载的吗? 能不能给一些代码示例?ActiveSupport::Dependencies.autoload_once_paths 里包括 lib 目录吗?
第二种方式,我已经用了很久了。包括在 Rails-2 和 Rails-3 。
你好。。模块名和文件名是不一样,这样会影响?我知道RAILS有许多习惯的约定
Rails 在找不到常量时,会根据这个常量的名字,加载文件。这确实是 Rails 的惯例。
大致的规则就是,如果类名(常量名、模块名都是常量)是 MaMbMc1::M2::M3,那么就把 :: 替换为 '/',单词变成小写,并且之间用下划线_连接 ,然后尝试在 ActiveSupport::Dependencies.autoload_paths 里的路径中,去查找是否有 ma_mb_mc1/m2/m3.rb 。如果有,那么就会去加载。
我记得 php 可以定义一个方法,在某个类找不到时,去加载某个文件。Rails 和这个大致类似吧。
如果模块名和文件名不一样,那根据上面的规则,肯定是加载不到这个文件的(因为根据模块名得到的文件名是不一致的)。 除非你在代码某个地方使用 require 已经加载了文件。
按照 Rails 的惯例, MaMbMc1::M2::M3 就应该定义在 ma_mb_mc1/m2/m3.rb 文件中。如果在
ma_mb_mc1/m2/m3.rb 中定义的是名为 Mx 的模块,那么第一次使用
MaMbMc1::M2::M3 常量时,就会抛出异常,告诉你 ma_mb_mc1/m2/m3.rb 应该定义
MaMbMc1::M2::M3。
ActiveSupport::Dependencies.autoload_paths 默认只有 app/assets 、app/helpers 、app/controllers 、 app/mailers 、app/models 这几个目录。你可以尝试一下,打开终端,输入
ActiveSupport::Dependencies.autoload_paths = []
然后随便输入模型的名字,Rails 都会报错 NameError: uninitialized constant xxx 。因为Rails 加载模型,也是用 const_missing 机制的。
另外,Rails-2 和 Rails-3 不太一样。 Rails-2 没有 ActiveSupport::Dependencies.autoload_paths ,而用了另外一个名字的属性。默认的路径里,不仅包括 lib 在内当前项目里的一些目录,还包括使用到的 gem 里的 lib 目录。
你 lib 放的东西要符合rails自动加载的命名规则,看看源码是怎么放的。
机制是这样,就说明这下面应该放一些不容易被修改或是已经成熟的东西
后方可回复, 如果你还没有账号请点击这里 。
共收到 19 条回复

我要回帖

更多关于 rails内存泄漏 的文章

 

随机推荐