从另一个调用一个Ruby脚本

时间:2012-06-25 02:27:39

标签: ruby paypal

我遇到了一个令人困惑的问题。我想从另一个调用一个ruby脚本。

考虑到这一点,我创建了一个testscript.rb并执行它,它包含了这段代码,

 require './paypal.rb'
 puts paypal['L_AMT0']

此代码返回一个数字,这是我的paypal余额。它依赖于使用ruby-paypal gem的paypal.rb文件。当我做ruby testscript.rb时,我得到了我的贝宝平衡输出,这意味着它正常工作。这告诉我从另一个RB调用一个RB的方法是可以的,因为在上面的场景中,testscript.rb正在获取一个从paypal.rb返回的变量。

使用相同的逻辑,我将上面的代码插入另一个名为SiriProxy的程序中。这是一个红宝石计划。我需要它来获得我的paypal平衡。

所以在那个程序中,我做了一个要求paypal.rb,它失败了,因为它找不到它,所以我在require中设置了一个绝对路径来修复它。

然而,当SiriProxy(另一个ruby rb给我一个问题)试图运行put paypal ['L_AMT0']时会导致错误并结束程序。

这是错误,

[Info - Plugin Manager] Say: Checking Paypal Balance
/home/siriproxy/.rvm/gems/ruby-1.9.3-p194@SiriProxy/gems/siriproxy-0.3.0/plugins/siriproxy-example/lib/siriproxy-example.rb:47:in `block in <class:Example>': undefined local variable or method `paypal' for #<SiriProxy::Plugin::Example:0x931a228> (NameError)
    from /home/siriproxy/.rvm/gems/ruby-1.9.3-p194@SiriProxy/bundler/gems/cora-1edcfb9073d5/lib/cora/plugin.rb:47:in `instance_exec'
    from /home/siriproxy/.rvm/gems/ruby-1.9.3-p194@SiriProxy/bundler/gems/cora-1edcfb9073d5/lib/cora/plugin.rb:47:in `block (2 levels) in process'

在上面的输出中,似乎问题是它不理解“paypal”,如下所示:

  

未定义的局部变量或方法`paypal'

但是,我不明白为什么,因为在testscript.rb中我做了完全相同的事情并且它有效。

有人可以帮忙吗?谢谢。

2 个答案:

答案 0 :(得分:0)

从当前目录加载文件

我对您的库或其内部结构一无所知,但看起来您的require语句可能有误。如果要从Ruby 1.9.3中的当前目录加载文件,则应使用:

require_relative 'paypal'

Bundler and Gems

如果它是作为bundle的一部分安装的gem(例如gem在Gemfile中定义),那么在require语句中提供路径是错误的。相反,您需要按如下方式要求捆绑的gem:

require 'bundler/setup'
require 'paypal'

答案 1 :(得分:0)

好像@CodeGnome是对的。

From the Kernel documentation:

要求(姓名)→真或假

  

加载给定名称,成功时返回true,如果成功则返回false   功能已加载。

require_relative(string)→true或false

  

Ruby尝试加载名为string的库相对于require   文件的路径。如果无法确定文件的路径,则为LoadError   提高。如果加载文件,则返回true,否则返回false。