【问题标题】:'Require' works on one computer but not on another“要求”在一台计算机上有效,但在另一台计算机上无效
【发布时间】:2012-06-05 16:43:35
【问题描述】:

我在尝试运行 ruby​​ 脚本的服务器上收到此错误。

require: no such file to load -- ssch_mail_lib (LoadError)

但是,在我的工作站计算机上,脚本运行良好。

这里是相关代码。

#!/usr/bin/ruby
$: << './lib'
require 'ssch_mail_lib'

$LOAD_PATH 的输出

/Library/Ruby/Site/1.8
/Library/Ruby/Site/1.8/powerpc-darwin11.0
/Library/Ruby/Site/1.8/universal-darwin11.0
/Library/Ruby/Site
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/vendor_ruby/1.8
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/vendor_ruby/1.8/universal-darwin11.0
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/vendor_ruby
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/powerpc-darwin11.0
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/universal-darwin11.0
.
./lib

我已经检查了三倍的名称和目录。他们匹配。

任何想法我错过了什么?或者为什么它可以在一台机器上正常工作而在另一台机器上却不行?谢谢!

编辑:他们都使用 Ruby 1.8.7。

EDIT2:该脚本仅在通过 TextMate 运行时有效。使用终端时,(LoadError) 不起作用。

【问题讨论】:

  • 什么版本的 Mac OSX 和 Ruby?什么拱门?
  • 英特尔。 OS X 狮子。服务器是 10.7.3。我的工作站是 10.7.4。两者都使用相同版本的 Ruby,1.8.7。
  • 如果两者之间没有其他差异,则可能是次要版本号的差异(非常不可能)或与环境变量和其他事物有关的差异(也不太可能)。恐怕我帮不了你。这听起来很愚蠢,但也许你可以添加一个.rb 扩展?
  • 感谢您的帮助。查看我最近的编辑。想知道 TextMate 在做什么,而终端不是……
  • 需要注意的一点:.指的是进程的当前工作目录,不一定与包含文件的目录相同。如果在服务器上启动 ruby​​ 的任何东西是从不同的目录执行的,./lib 将引用与包含 ssch_mail_lib.rb 的目录不同的目录(我假设它直接位于主脚本文件下)。

标签: ruby


【解决方案1】:

1.8 和 1.9 之间有一个根本区别:需要语义。在 1.8 中,require 处理相对路径和绝对路径。在 1.9 中,require 只能用于标准库,不能用于相对路径或位置中的用户定义文件。为此,您必须使用 Ruby 1.9 方法 require_relative。我猜你的一台电脑是1.8,另一台是1.9。您可以使用带有RUBY_VERSION 的子句来制作特定于版本的代码。

【讨论】:

  • 刚刚确认他们都在使用 Ruby 1.8.7
  • 真的吗?这很奇怪。文件在他们俩身上都有吗?帮我一个忙,试试require "lib/ssch_mail_lib"。这行得通吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-05
  • 2016-04-16
  • 1970-01-01
  • 2023-02-03
  • 1970-01-01
  • 2014-01-21
  • 2014-11-10
相关资源
最近更新 更多