标签: load-path

如何在红宝石中引用本地宝石?

我将一些ruby代码打包到gem中.我想在其他一些代码中引用gem中的代码.所以在Gemfile中我指定了gem的名称,版本和本地路径.喜欢:

gem 'gemname','0.x', :path => 'RELATIVE_PATH_TO_GEM_FILE'
Run Code Online (Sandbox Code Playgroud)

捆绑安装后,我明白了

Using gemname (0.x) from source at RELATIVE_PATH_TO_GEM_FILE
Run Code Online (Sandbox Code Playgroud)

但是当我运行代码时,它无法在gem中找到代码.LOAD_PATH显示ABSOLUTE_PATH_TO_GEM_FILE/lib.

难怪它找不到代码,只有ABSOLUTE_PATH_TO_GEM_FILE下的gem文件.它没有打开包装.所以没有lib目录.

如果我宝石将这个宝石文件安装到我的系统中,那么一切正常.我可以看到gem文件被解压缩到源代码文件中.但我的问题是它是否可以直接引用本地gem文件?

ruby gem load-path

7
推荐指数
1
解决办法
7258
查看次数

在外部添加$ LOAD_PATH

我明白要添加$ LOAD_PATH的路径就行了

$LOAD_PATH.unshift(path)
Run Code Online (Sandbox Code Playgroud)

但是我必须在我写的每个程序中添加这一行.无论如何将其添加到系统级别?

我尝试在Ruby的启动脚本上搜索一下,但没有找到答案.我试图加入这一行kernel/common/module.rb,ruby_constants.rb,loader.rb,等.但都不起作用.

我应该在哪个文件中添加此行?


更新:

我正在使用ubuntu 10.04和Rubinius.没有调用的系统变量RUBYLIB.

尝试创建一个但没有工作.但我意识到我犯了一个错误,忘了在bash脚本中添加变量.bashrc.添加变量后,一切正常!

ruby load-path

7
推荐指数
1
解决办法
4867
查看次数

RVM - Ruby集成被提取到一个单独的gem(`remove $ LOAD_PATH.unshift`)

我正在升级到Rails 3.2.6(ruby 1.9.3-p194)并在Debian上安装RVM并使用Apache2服务器(2.2.19).

我使用了这些非常好的说明:http://dalibornasevic.com/posts/21-rvm-and-passenger-setup-for-rails-2-and-rails-3-apps/

Apache服务器配置/etc/apache2/apache2.conf包括:

LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p194@rails326/gems/passenger-3.0.13/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p194@rails326/gems/passenger-3.0.13
PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p194@rails326/ruby
Run Code Online (Sandbox Code Playgroud)

当我设置好一切(并摆脱了大量的错误消息:)时,会出现以下来自乘客的错误消息:

RVM - Ruby集成被提取到一个单独的gem,默认情况下应该用RVM安装,删除该$LOAD_PATH.unshift行,所有应该再次正常.

通过$LOAD_PATH.unshift在MyApp/config/setup_load_paths.rb中注释,此错误消失,而我得到500错误,内部服务器错误.

/etc/log/apache2/error.log:

[ pid=5262 thr=3075372800 file=ext/apache2/Hooks.cpp:862 time=2012-07-10 12:33:41.475 ]: Unexpected error in mod_passenger: Cannot spawn application '/var/www/MyApp': The spawn server has exited unexpectedly.
  Backtrace:
     in 'virtual Passenger::SessionPtr Passenger::ApplicationPool::Client::get(const Passenger::PoolOptions&)' (Client.h:742)
     in 'Passenger::SessionPtr Hooks::getSession(const Passenger::PoolOptions&)' (Hooks.cpp:294)
     in 'int Hooks::handleRequest(request_rec*)' (Hooks.cpp:563)
Run Code Online (Sandbox Code Playgroud)

如果有人能给我一个关于这个问题的线索,我会很高兴.
非常感谢你.
鸢尾花

apache2 load-path rvm rails-3-upgrade ruby-on-rails-3.2

7
推荐指数
0
解决办法
1375
查看次数

使用和不使用Rails的快速(Rspec)测试

我有两节课:

1.Sale是ActiveRecord的子类; 它的工作是将销售数据保存到数据库中.

class Sale < ActiveRecord::Base
  def self.total_for_duration(start_date, end_date)
    self.count(conditions: {date: start_date..end_date})
  end
  #...
end
Run Code Online (Sandbox Code Playgroud)

2.SalesReport是一个标准的Ruby类; 它的工作是生成和绘制有关销售的信息.

class SalesReport
  def initialize(start_date, end_date)
    @start_date = start_date
    @end_date = end_date
  end

  def sales_in_duration
    Sale.total_for_duration(@start_date, @end_date)
  end
  #...
end
Run Code Online (Sandbox Code Playgroud)

因为我想使用TDD并且我希望我的测试运行得非常快,所以我为SalesReport编写了一个不加载Rails的规范:

require_relative "../../app/models/sales_report.rb"

class Sale; end
# NOTE I have had to re-define Sale because I don't want to
# require `sale.rb` because it would then require ActiveRecord.

describe SalesReport do
  describe "sales_in_duration" do
    it "calls Sale.total_for_duration" do
      Sale.should_receive(:total_for_duration)
      SalesReport.new.sales_in_duration
    end …
Run Code Online (Sandbox Code Playgroud)

ruby tdd rspec stub load-path

6
推荐指数
1
解决办法
832
查看次数

如何将 gem 配置为仅使用系统 gem?

我想将 gem 配置为仅使用系统 gem - 而不是$HOME/.gem. 这是因为我正在编写一个将访问的脚本Gem.path,但我不希望它返回我的主目录中 gems 的路径。

我很确定我没有在我的等中明确设置GEM_HOME或类似的内容.bashrc.bash_login

Gem.path首先返回我的 homedir gems:

irb
> Gem.path
=> ["/home/nfm/.gem/ruby/1.9.1", "/usr/local/lib/ruby/gems/1.9.1"]
Run Code Online (Sandbox Code Playgroud)

我可以阻止这种情况发生吗?在哪里配置的?或者只是默认首先查看 homedir ?

如果我无法配置此功能,我可以使用 regexp hackery 返回 gem 的系统路径吗?

更多细节:

which ruby
/usr/local/bin/ruby
ruby --version
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]

gem env
  - RUBYGEMS VERSION: 1.3.7
  - RUBY VERSION: 1.9.2 (2010-08-18 patchlevel 0) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.9.1
  - RUBY EXECUTABLE: /usr/local/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/local/bin
  - RUBYGEMS PLATFORMS: …
Run Code Online (Sandbox Code Playgroud)

ruby rubygems load-path

5
推荐指数
1
解决办法
4072
查看次数

$ LOAD_PATH和$:如何不同?

我需要知道我的Ruby加载路径中有什么,所以我这样做了:

$ ruby -e "puts $LOAD_PATH"
Run Code Online (Sandbox Code Playgroud)

它没有打印任何东西,我想到.所以我尝试了这个:

$ ruby -e "puts $:"
/usr/local/lib/site_ruby/1.8
/usr/local/lib/site_ruby/1.8/i486-linux
/usr/local/lib/site_ruby/1.8/i386-linux
/usr/local/lib/site_ruby
/usr/lib/ruby/vendor_ruby/1.8
/usr/lib/ruby/vendor_ruby/1.8/i486-linux
/usr/lib/ruby/vendor_ruby
/usr/lib/ruby/1.8
/usr/lib/ruby/1.8/i486-linux
/usr/lib/ruby/1.8/i386-linux
.
Run Code Online (Sandbox Code Playgroud)

为什么第二个给我预期的输出而第一个没有?它们不应该是一样的吗?我刚尝试过irb,我得到了我期望的结果.

这是我的Ruby版本,以防它有所不同:

$ ruby --version
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
Run Code Online (Sandbox Code Playgroud)

ruby load-path

3
推荐指数
1
解决办法
2727
查看次数

在Ruby编程语言中,$的名称是什么:

我想知道更多,$:但我不知道怎么称呼.

:015 > $:
=> ["/Users/Nerian/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/site_ruby/1.9.1", 
 "/Users/Nerian/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/site_ruby/1.9.1/x86_64-darwin11.1.0", 
 "/Users/Nerian/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/site_ruby", 
 "/Users/Nerian/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/vendor_ruby/1.9.1", 
 "/Users/Nerian/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin11.1.0", 
 "/Users/Nerian/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/vendor_ruby", 
 "/Users/Nerian/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/1.9.1", 
 "/Users/Nerian/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/1.9.1/x86_64-darwin11.1.0"]
Run Code Online (Sandbox Code Playgroud)
  • 这是什么名字?
  • 它是如何以及何时使用的?
  • 是否应该使用它,这是一种好的做法还是一种不好的做法?
  • 是否所有Ruby实现都支持它?
  • 关于它的任何文档?

ruby load-path

3
推荐指数
2
解决办法
523
查看次数

我在哪里可以看到当前ruby安装中的类的源代码?

我是ruby的新手但是我使用RVM安装了各种版本的Ruby,这是我的LOAD_PATH的输出

ruby-1.9.2-p136 :001 > puts $LOAD_PATH
/home/jose/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1
/home/jose/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/i686-linux
/home/jose/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby
/home/jose/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1
/home/jose/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1/i686-linux
/home/jose/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby
/home/jose/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1
/home/jose/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/i686-linux
Run Code Online (Sandbox Code Playgroud)

好.所以这里的问题是,在这些目录中我可以看到像Array或Time这样的类的源代码吗?(我知道,这是一个非常n00b的问题,但我需要知道.)

我一直需要看看Array的来源很长一段时间.

提前致谢!

PS.如果我想成为一名更好的红宝石程序员,你建议看哪一堂课?

ruby load-path

1
推荐指数
1
解决办法
1630
查看次数

$ LOAD_PATH不包含工作目录?

为什么当前目录不包含在$ LOAD_PATH中?这看起来很奇怪.我只是继续添加它,但是有一些原因我没有看到它只是没有自动包含?

ruby load-path

0
推荐指数
1
解决办法
597
查看次数