- 浏览: 1309056 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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)
Rails源码阅读(四)rubygems之require_Rails_require_深入理解
提出问题:
require的行为为何不同?
require 'pp' 其实是从加载路径中找到了pp这个文件并且加载
require 'active_support' 加载了active_support这个文件,但这个文件并没有在加载路径中的,如果你自己手动加载过active_support库,你一定会知晓这个了
irb(main):001:0> require 'active_support' LoadError: no such file to load -- active_support from (irb):1:in `require' from (irb):1
基本知识:require的寻找方法
返回值:
require(string) => true or false
Ruby tries to load the library named string, returning true if successful.
寻找的路径:
If the filename does not resolve to an absolute path, it will be searched for in the directories listed in $:.
寻找的文件格式:
If the file has the extension ``.rb'', it is loaded as a source file;
if the extension is ``.so'', ``.o'', or ``.dll'', or whatever the default shared library extension is on the current platform, Ruby loads the shared library as a Ruby extension.
Otherwise, Ruby tries adding ``.rb'', ``.so'', and so on to the name.
不会重复加载;如何判断已经加载过了;加载的文件存储位置:
The name of the loaded feature is added to the array in $". A feature will not be loaded if it's name already appears in $".
注意:
However, the file name is not converted to an absolute path, so that ``require 'a';require './a''' will load a.rb twice.
附:
require "my-library.rb" require "db-driver"
require "directory1/directory2/directory3/xxx" #这样可以根据$:的相对路径寻找。
寻找答案:
在1.9之前,加载gem库的话,需要先加载rubygems,也就是先执行 require 'rubygems' 这个语句。
加载前后,加载路径并没有什么变化,依然如下:
irb(main):005:0> pp $: ["/opt/ruby/lib/ruby/site_ruby/1.8", "/opt/ruby/lib/ruby/site_ruby/1.8/i686-linux", "/opt/ruby/lib/ruby/site_ruby", "/opt/ruby/lib/ruby/vendor_ruby/1.8", "/opt/ruby/lib/ruby/vendor_ruby/1.8/i686-linux", "/opt/ruby/lib/ruby/vendor_ruby", "/opt/ruby/lib/ruby/1.8", "/opt/ruby/lib/ruby/1.8/i686-linux", "."]
但是执行了require 'activesupport'语句之后,就有变化了
irb(main):005:0> require 'activesupport' DEPRECATION WARNING: require "activesupport" is deprecated and will be removed in Rails 3. Use require "active_support" instead.. (called from /opt/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/activesupport.rb:2) => true irb(main):006:0> pp $: ["/opt/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/i18n-0.1.3/lib", "/opt/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/bin", "/opt/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib", "/opt/ruby/lib/ruby/gems/1.8/gems/builder-2.1.2/bin", "/opt/ruby/lib/ruby/gems/1.8/gems/builder-2.1.2/lib", "/opt/ruby/lib/ruby/gems/1.8/gems/memcache-client-1.8.5/bin", "/opt/ruby/lib/ruby/gems/1.8/gems/memcache-client-1.8.5/lib", "/opt/ruby/lib/ruby/gems/1.8/gems/tzinfo-0.3.27/bin", "/opt/ruby/lib/ruby/gems/1.8/gems/tzinfo-0.3.27/lib", "/opt/ruby/lib/ruby/site_ruby/1.8", "/opt/ruby/lib/ruby/site_ruby/1.8/i686-linux", "/opt/ruby/lib/ruby/site_ruby", "/opt/ruby/lib/ruby/vendor_ruby/1.8", "/opt/ruby/lib/ruby/vendor_ruby/1.8/i686-linux", "/opt/ruby/lib/ruby/vendor_ruby", "/opt/ruby/lib/ruby/1.8", "/opt/ruby/lib/ruby/1.8/i686-linux", "."]
这里可以推测,require方法做了某些特殊的处理。
请留意一下,当前路径即“.”路径在最后,这个设计是多么周到,想想看,为什么~
查看源码
ruby的require源码,只是个stub:
def require(string) #This is a stub, used for indexing end
应该仔细阅读下注释,还是比较重要的:
#1 并不是只加载.rb文件,你知道么
#2 加载次数问题和名字问题
#3 怎么防止重复加载,防止的机制是什么
rubygems重载了require这个最基本的方法:
alias gem_original_require require def require(path) # :doc: gem_original_require path rescue LoadError => load_error if load_error.message =~ /#{Regexp.escape path}\z/ and spec = Gem.searcher.find(path) then Gem.activate(spec.name, "= #{spec.version}") gem_original_require path else raise load_error end end
注释写的比较清楚,
#1 如果没有找到例如active_support,则使用Gem来activate,之后再require
#2 Gem来activate做了哪些事情呢:
that gem is activated (added to the loadpath).
所以这里改变了加载的路径
接下来要不要看看Gem做的事情呢。
应该的。不过可以推测一下,整体上还是做了些java世界里mvn做的一部分工作。
先占个位:
深入理解ruby安装,require,load,gem,等等
http://www.skorks.com/ #这个人不错阿,技术人的性格,deep into ruby!
http://www.skorks.com/2009/08/digging-into-a-ruby-installation-require-vs-load/
--deep into rails command line
http://www.skorks.com/2011/08/when-developers-go-to-great-length-to-save-typing-4-letters/
--deploy rails to tomcat 很好很强大for javaer
http://www.skorks.com/2010/02/using-ruby-on-rails-with-oracle-and-deploying-it-all-to-tomcat/
http://rubylearning.com/satishtalim/including_other_files_in_ruby.html#一个require和load的解释
====本文结束==== ----EOF---- 。。。。END。。。。
RoR
RoR
RoR
+o+
RoR
RoR
RoR
发表评论
-
Rails外如何启动rails的类自动加载_activates autoloading using ActiveSupport 3.x
2016-06-22 12:08 652The following cod ... -
Rails源码阅读(13)rails中的autoload和ruby的autoload
2014-07-30 17:13 1960Rails源码阅读(13)rails中的autoload和 ... -
Rails源码阅读(12)叫Rails的模块module_Rails常量使用
2014-07-02 09:35 1085The module nams "Rail ... -
Rails源码阅读(11)Rails使用bundle保持多机器环境gem版本的一致性
2013-09-05 19:21 1486Rails源码阅读(11)Rails使用bundle ... -
Rails源码阅读(十)在console 使用ActionController::Integration::Session
2012-05-05 14:48 1785Rails源码阅读(十)在console 使用Actio ... -
Rails源码阅读(九)ActionView::Base_用户请求在rails中的处理流程(4)
2012-04-08 18:19 2221Rails源码阅读(九)ActionView::Base_用户 ... -
Rails源码阅读(八)ActionController::Base_用户请求在rails中的处理流程(3)
2012-04-06 23:01 1745Rails源码阅读(八)Actio ... -
Rails源码阅读(七)ActionController::Dispatcher_用户请求在rails中的处理流程(2)
2012-04-06 22:25 1389Rails源码阅读(七)Actio ... -
动手写rails(二)Rails_Ruby_ERB使用_模板_定制
2012-04-07 20:46 2585动手写rails(二)Rails_Ruby_ERB使用_模板_ ... -
Rails源码阅读(六)ActionController::Dispatcher_用户请求在rails中的处理流程(1)
2012-03-28 00:17 1724Rails源码阅读(六)ActionController::D ... -
Rails源码阅读(零)_config/boot
2012-03-15 11:56 1799不论是script/console 还是 script/ser ... -
动手写rails(一)_Rack标准和HttpServer之WEBrick
2012-03-15 07:22 2109无论如何,最终的结果是要启动一个server来接受请求, ... -
Rails源码阅读(五)with_scope 和 named_scope
2012-02-02 15:24 1452Rails源码阅读(四)with_scope and name ... -
Rails源码阅读(三)Rails::Initializer
2011-10-14 10:58 2180启动的落脚点 不论启动console还是启动serve ... -
Rails源码阅读(二)_script/server
2011-09-17 18:51 1455Rails源码阅读(二)_script/server ... -
Rails源码阅读(一)_script/console
2011-09-05 11:13 2152Rails源码阅读_script/console启动 ...
相关推荐
为了深入理解这个Gem的工作原理和如何使用,开发者通常需要查阅其包含的README文件、示例代码和API文档。 总的来说,这个开源项目为Ruby和Rails开发者提供了一个方便、安全的工具,让他们能够轻松地集成OpenSSL的...
require 'rubygems'require 'cramp/controller'class WelcomeAction < Cramp::Controller::Action on_start :send_hello_world def send_hello_world render "Hello World" finish endendRack::Handler::Thin.run ...
隔离 家描述 隔离是一个非常简单的RubyGems沙箱。 它提供了一种表达和自动安装项目的Gem依赖...入门 ↑ Rails 2¶ ↑ 在config/preinitializer.rb : require "rubygems"require "isolate/now"在Isolate : gem "rails
安装gem: gem install swissmatch-rails 根据安装rubygems的方式,您必须使用sudo : sudo gem install swissmatch-rails 在Ruby中: require 'swissmatch/rails' 用法 宝石文件 要使用swissmatch-rails,最好的...
#### 四、创建和分享RubyGems 除了安装和使用现有的gem之外,RubyGems还支持用户自行创建并分享自己的gem。下面是一个简单的示例: 1. **建立文件夹结构** ``` . ├── lib │ └── topico.rb └── ...
Ruby 是一种面向对象的编程语言,经常与 Rails 框架一起使用来构建 Web 应用,包括像淘淘商城这样的电商平台。`gem` 文件是 Ruby 社区的标准包管理器,用于分发、安装和管理 Ruby 库和应用程序。 在描述中提到的...
*= require_self */ // "bootstrap-sprockets" must be imported before "bootstrap" and "bootstrap/variables" @import "bootstrap-sprockets"; @import "bootstrap"; @import "main"; @import "about"; @...
这是一个最小的演示应用程序,展示了如何在 Sinatra 应用程序中使用 。 Rails Assets 将与基于的应用程序集成在一起。 一体化 文件 此应用程序使用将 Sinatra 与 Sprockets 集成的 Sinatra 。 您还需要添加适当的...
*= require_self */ // "bootstrap-sprockets" must be imported before "bootstrap" and "bootstrap/variables" @import "bootstrap-sprockets"; @import "bootstrap"; @import "main"; @import "about"; @...
在这个每隔一段时间发布一个新的异步作业处理库的狂野世界中,Qe 试图保持一个与最著名的库一起工作的统一接口: /后 要设置适配器,只需根据您的适配器加载文件: require "qe/resque" require "qe/qu" require ...
安装 gem install cobregratis设置您的令牌 require 'rubygems'require 'cobregratis'Cobregratis :: Base . site = '...
然后安装Ruby,RubyGems和ruby数据库驱动程序(例如gem install mysql或gem install mysql2 ): $ gem install standalone_migrations 添加到项目基本目录中的Rakefile中: require 'standalone_migration
**Rails 5 测试** ...通过深入理解这些概念和实践,你可以构建出更健壮、更易于维护的 Rails 应用,并确保它们在各个环境中的表现一致。记得始终关注测试驱动开发(TDD),让你的代码在每个阶段都得到充分验证。
via Rubygems gem install remove_emoji In your Gemfile: gem 'remove_emoji' , '~> 3.0.0' Usage / 使用方式 使用方式很简单,仅需要呼叫RemoveEmoji::Sanitize.call 递入你要过滤的字串即可过滤。 require ...
gem 'scrivito' , github : 'infopark/rails_connector' gem 'scrivito-tag-editor' , require : 'scrivito_tag_editor' , github : 'kostia/scrivito-tag-editor' 在scrivito之后添加到app/assets/javascripts/...
安装可以通过RubyGems完成,只需在命令行输入`gem install spreadsheet_architect`。 一旦安装完成,你可以开始使用这个库。以下是一个简单的例子,展示如何将一个ActiveRecord模型的集合转换为CSV文件: ```ruby ...
首先,让我们深入了解一下如何在 Ruby 环境中安装 `sqlite3` gem。Ruby on Rails 框架通常默认使用 `sqlite3` 作为开发数据库,因此掌握其安装方法对开发者来说至关重要。在大多数情况下,你可以通过以下命令行操作...
由于引导程序依赖于此,因此请使用bin/yarn add jquery安装,以bin/yarn add jquery或通过gem 'jquery-rails'并将//= require jquery添加到application.js 。 注意:确保您的Gemfile中显示了sass-rails gem。 安装...
Xeroizer API库 ...介绍 该库旨在帮助基于ruby / rails的应用程序与Xero的公开API进行通信。 如果您不熟悉Xero API,则应...require 'rubygems' require 'xeroizer' # Create client (used to communicate with the API
- lobste.rs网站的源码,采用Rails开发的网站,类似Hacker News以分享链接和讨论为核心。可用于二次开发类似的网站。 3. **spree**: - 基于Ruby on Rails实现的大而全的电子商城开源项目。功能齐全,项目结构清晰...