- 浏览: 1329709 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (732)
- Java_about (146)
- Spring_Hibernate_Struts_OpenSource (27)
- linux_unix (62)
- life_sth (22)
- js_css_html_xml_nodejs (69)
- design_pattens (1)
- Perl (8)
- php_ecshop (4)
- DB_Mysql_Oracle_Informix_SqlServer (43)
- JSTL (8)
- Testing_自动化测试 (42)
- DB_ID_UUID (4)
- SEM_SEO (1)
- english_study_improvement (4)
- SVN_Git (9)
- WebService_SOA_CloudComputing (3)
- E-Commerce (1)
- Lucene_Solr (7)
- others (2)
- Regex (2)
- tomcat_jetty (8)
- zeroc-ice (1)
- java_excel (5)
- ant_maven_gradle (5)
- Unity_VR_AR_C# (2)
- jmeter (1)
- XPath_dom4j (1)
- Ruby_and_Rails (68)
- write_a_rails (17)
- manage_and_team (1)
- getting_real (1)
- ubuntu (20)
- git_and_git_flow (7)
- TODO (1)
- PM_design (2)
- Python_and_Django (8)
- NoSql_mongo_redis (24)
- C/C++ (3)
- vi_vim_gvim (0)
- c#_.Net_windows编程_dll (10)
- Php_and_Yii (9)
- Android_IOS (31)
- Mysql (5)
- sa_运维_network_硬件 (37)
- lua (2)
- c_cpp_VisualStudio (21)
- 硬件-RM-Arduino (6)
最新评论
-
shenkun58:
...
NoClassDefFoundError: Could not initialize springframework.BeanCreationException -
liaojia1:
正解,感谢
NoClassDefFoundError: Could not initialize springframework.BeanCreationException -
flingfox63:
谢谢分享,电脑上有IPV6,导致了Guard启动不了……
ruby错误解决: Address family not supported by protocol - connect(2) -
c39274936:
s = "hello_world_ruby" ...
驼峰格式和下划线格式转换_translation between camel and snake format -
yfj300:
学习了学习了学习了学习了
硬盘基本知识(磁道、扇区、柱面、磁头数、簇、MBR、DBR)
不论是script/console 还是 script/server 都会调用前置的文件:config/boot
现在分析一下这个文件的源代码,看看究竟做了哪些工作。
config/boot.rb阅读:
# Don't change this file! # Configure your app in config/environment.rb and config/environments/*.rb RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT) module Rails ... ... end # All that for this: Rails.boot!
看这个模块定义之外的代码就首尾两行,比较直观。
Rails模块内容:
#启动,做了两件事
class << self
def boot!
unless booted?
preinitialize
pick_boot.run
end
end
# 可以在preinitialize这里写一个patch,做些rails启动之前的操作:
def preinitializer_path
"#{RAILS_ROOT}/config/preinitializer.rb"
end
# pick_boot会找是用系统安装的rails还是固化到vender目录的rails
#1 verder的rails加载,3个步骤
class VendorBoot < Boot
def load_initializer
require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
Rails::Initializer.run(:install_gem_spec_stubs)
Rails::GemDependency.add_frozen_gem_path
end
end
#2 系统安装的rails加载
class GemBoot < Boot
def load_initializer
self.class.load_rubygems #=>require 'rubygems'操作和检查版本
load_rails_gem #=>gem 'rails', version
require 'initializer'
end
# rails 是要用系统安装的,还是vender目录的,启动的时候仅仅有没有这个目录来决定
def vendor_rails?
File.exist?("#{RAILS_ROOT}/vendor/rails")
end
# rails启动之前,如果想做些操作,放在哪里呢
def preinitializer_path
"#{RAILS_ROOT}/config/preinitializer.rb"
end
# rails 启动的时候,知道gem版本么
def gem_version
if defined? RAILS_GEM_VERSION
RAILS_GEM_VERSION
elsif ENV.include?('RAILS_GEM_VERSION')
ENV['RAILS_GEM_VERSION']
else
parse_gem_version(read_environment_rb)
end
end
private
def read_environment_rb
File.read("#{RAILS_ROOT}/config/environment.rb")
end
看见了么,只能在environment.rb里申明,如果是自己配置的话,不能在例如development.rb里申明
# EVN在很多地方用到,他在哪里定义的呢(我并没有发现在config里面定义的地方)
Ok吧,在这里
irb;Object.const_get('ENV') 或者用这个命令ruby -e 'puts Object.const_get("ENV").inspect'
# 一个设计模式,AcstractClass,父类没有必要非要显式申明一个接口给子类
java等编译型语言需要这么做,因为编译的时候会检查
非编译型语言可以不这么做
但申明的话,会更好看些,利于团队合作
class Boot def run load_initializer Rails::Initializer.run(:set_load_path) end end class VendorBoot < Boot def load_initializer require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer" Rails::Initializer.run(:install_gem_spec_stubs) Rails::GemDependency.add_frozen_gem_path end end
最终Rails.boot!做了什么
class Boot def run load_initializer #选取了自带的rails还是vender的rails Rails::Initializer.run(:set_load_path) #这个是关键语句 end end #run的代码: Rails::Initializer.run(:set_load_path) #做了什么 def self.run(command = :process, configuration = Configuration.new) #这里已经new了一个conf yield configuration if block_given? #可以修改conf的配置 initializer = new configuration #new 一个 initializer initializer.send(command) #执行command #-->>这里就是要执行:set_laod_path initializer end
#set_laod_path的执行作用:
# Rails::Initializer.run(:set_load_path) # # This is useful if you only want the load path initialized, without # incurring the overhead of completely loading the entire environment. # Set the <tt>$LOAD_PATH</tt> based on the value of # Configuration#load_paths. Duplicates are removed. def set_load_path load_paths = configuration.load_paths + configuration.framework_paths load_paths.reverse_each { |dir| $LOAD_PATH.unshift(dir) if File.directory?(dir) } #移除if it is not dir $LOAD_PATH.uniq! end
#到底有多少framework: def framework_paths paths = %w(railties railties/lib activesupport/lib) #3个 #1个,其实actionpack会加载:action_controller和:action_view paths << 'actionpack/lib' if frameworks.include?(:action_controller) || frameworks.include?(:action_view) [:active_record, :action_mailer, :active_resource, :action_web_service].each do |framework| #4个 paths << "#{framework.to_s.gsub('_', '')}/lib" if frameworks.include?(framework) end paths.map { |dir| "#{framework_root_path}/#{dir}" }.select { |dir| File.directory?(dir) } end
==>>总结:
require File.expand_path('../../config/boot', __FILE__)
这个文件执行Rails.boot!,作用:
#1 根据有没有vender的rails,确定了使用rails的路径
#2 初始化了rails的环境路径(load_paths)(configuration.load_paths + configuration.framework_paths)
+
+
+
||
+
+
+
发表评论
-
Rails外如何启动rails的类自动加载_activates autoloading using ActiveSupport 3.x
2016-06-22 12:08 703The following cod ... -
Rails源码阅读(13)rails中的autoload和ruby的autoload
2014-07-30 17:13 2007Rails源码阅读(13)rails中的autoload和 ... -
Rails源码阅读(12)叫Rails的模块module_Rails常量使用
2014-07-02 09:35 1135The module nams "Rail ... -
Rails源码阅读(11)Rails使用bundle保持多机器环境gem版本的一致性
2013-09-05 19:21 1532Rails源码阅读(11)Rails使用bundle ... -
Rails源码阅读(十)在console 使用ActionController::Integration::Session
2012-05-05 14:48 1819Rails源码阅读(十)在console 使用Actio ... -
Rails源码阅读(九)ActionView::Base_用户请求在rails中的处理流程(4)
2012-04-08 18:19 2261Rails源码阅读(九)ActionView::Base_用户 ... -
Rails源码阅读(八)ActionController::Base_用户请求在rails中的处理流程(3)
2012-04-06 23:01 1782Rails源码阅读(八)Actio ... -
Rails源码阅读(七)ActionController::Dispatcher_用户请求在rails中的处理流程(2)
2012-04-06 22:25 1422Rails源码阅读(七)Actio ... -
动手写rails(二)Rails_Ruby_ERB使用_模板_定制
2012-04-07 20:46 2625动手写rails(二)Rails_Ruby_ERB使用_模板_ ... -
Rails源码阅读(六)ActionController::Dispatcher_用户请求在rails中的处理流程(1)
2012-03-28 00:17 1765Rails源码阅读(六)ActionController::D ... -
动手写rails(一)_Rack标准和HttpServer之WEBrick
2012-03-15 07:22 2139无论如何,最终的结果是要启动一个server来接受请求, ... -
Rails源码阅读(五)with_scope 和 named_scope
2012-02-02 15:24 1494Rails源码阅读(四)with_scope and name ... -
Rails源码阅读(四)gem_rubygems之require_Rails_require_深入理解(一)
2011-11-16 10:39 2179Rails源码阅读(四)rubygems之require_Ra ... -
Rails源码阅读(三)Rails::Initializer
2011-10-14 10:58 2207启动的落脚点 不论启动console还是启动serve ... -
Rails源码阅读(二)_script/server
2011-09-17 18:51 1473Rails源码阅读(二)_script/server ... -
Rails源码阅读(一)_script/console
2011-09-05 11:13 2172Rails源码阅读_script/console启动 ...
相关推荐
这个文件位于 `gems/rails-2.0.2/lib/initializer.rb` 对于 Gem 方式,或者 `RAILS_ROOT/vendor/rails/railties/lib/initializer.rb` 对于 Vendor 方式。`Initializer` 类在这个阶段执行核心的初始化任务,包括设置...
然后,在你的Rails应用中配置Paperclip,通常在`config/application.rb`或`config/environments/development.rb`中: ```ruby config.paperclip_defaults = { storage: :filesystem, path: ':rails_root/public...
介绍插件,用于对记录进行排序(使用 gem)安装要启用rails_admin_acts_as_list,请将以下内容添加到您的Gemfile : gem 'rails_admin_acts_as_list'gem 'rails_admin' 重要提示: rails_admin_acts_as_list之前必须...
将以下行添加到Rails应用程序中“ config / boot.rb”的末尾。 require 'safer_rails_console/patches/boot' 用法 演示此gem的最快方法是运行bundle exec rails console --sandbox 。 在最后安装步骤中,将几种...
Rails3 是 Ruby on Rails 框架的第三个主要版本,它在灵活性、性能和社区支持方面都有显著提升。Thinking Sphinx 是一个为 Rails 应用程序提供全文搜索功能的插件,它将数据库中的数据与 Sphinx 搜索引擎紧密结合,...
Rails表情符号选择器 表情符号选择器与Rails应用程序的简单集成。 预习 安装 将此行添加到您的应用程序的Gemfile中: gem 'rails_emoji_picker' 用法 运行命令 rails g rails_emoji_picker:install 它将表情符号...
Rails管理员导入 插件功能可将通用导入从CSV,JSON和XLSX文件添加到Rails Admin安装首先,添加到Gemfile中: gem "rails_admin_import" , "~> 2.2" 在config/initializers/rails_admin_import.rb定义配置: ...
rails_semantic_logger, Rails 语义记录器用语义记录器替换 Rails 缺省记录器 Rails 语义记录器 语义记录器用语义记录器替代 Rails 缺省记录器。http://github.com/rocketjob/rails_semantic_logger文档有关完整文档...
在config / application.rb中启用主题(紧接Bundler.require行之后): ENV['RAILS_ADMIN_THEME'] = 'material' 编辑或创建app / assets / javascripts / rails_admin / custom / ui.js并添加: //= r
起床并跑步运行bundle install 通过从ama_styles目录运行以下命令来设置.env文件: ln -s ~/src/rails_envs/ama_styles/.env.development .env.development ln -s ~/src/rails_envs/ama_styles/.env.staging .env....
rubocop-rails_config RuboCop配置具有与官方Ruby on Rails相同的代码样式检查。 安装 将此行添加到您的应用程序的Gemfile : gem "rubocop-rails_config" 用法 将此行添加到您的应用程序的.rubocop.yml : ...
Rails Notebook示例应用程序这是的示例应用程序的扩展 。 此项扩展的目的是允许为Rails应用推出Ruby笔记本。 一些有用的资源 这将通过扩展iRuby并使用rake任务来完成。 设置 : cd /tmpgit clone ...
Ruby on Rails,简称Rails,是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本篇将通过一个入门实例,深入探讨Rails的基本概念和核心...
Api-rails5_api_tutorial.zip,了解如何在michael hartl的rails 5教程上构建一个现代api立即在rails应用程序中构建一个api!(Rails 5版本),一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web...
rails_apps_composer, 一个 gem,为 Rails 启动应用程序创建 Rails 应用程序模板 Rails 应用编辑器 Rails 应用程序编辑器 gem 安装一个 命令行 工具来从"食谱"的Collection 组装 Rails 应用程序。"你可以使用 rails_...
### RestFul_Rails_Dev_v_0.1 关键知识点解析 #### 1. REST 概念与背景 REST(Representational State Transfer)是一种软件架构风格,最初由 Roy Fielding 在他的博士论文中提出。它主张使用 HTTP 协议的标准方法...
"Rails Open Flash Chart" 是一个基于Ruby on Rails框架的库,用于在Web应用程序中生成交互式的Flash图表。这个库允许开发者轻松地创建各种统计图表,如折线图、柱状图、饼图等,以便更好地可视化数据。由于Flash在...
通过阅读这本书的翻译版,开发者不仅能学习到RESTful设计模式,还能掌握Rails框架下实现这些模式的具体方法和技术。无论是初学者还是经验丰富的Rails开发者,都能从中受益匪浅,提升自己的Web开发技能。
themes_on_rails, 向 Rails 3/4/5 应用程序添加多个主题支持 ThemesOnRails 安装安装最简单的方法是使用 Bundler 。将这里 gem 添加到你的Gemfile:gem 'themes_on_rails'如果要对 liquid 模板使用
Rails电子邮件预览 使用此Rails引擎在浏览器中预览电子邮件。 与Rails 4.2+兼容。 一封电子邮件评论: 所有电子邮件预览的列表: REP带有两个主题:一个简单的独立主题和一个使用的主题。安装加 到Gemfile: gem '...