'require 'rmagick' 和 'require RMagick' 之间的区别(Mac 与 Debian)

Pau*_*oor 2 ruby macos ubuntu debian rmagick

我正在使用 Mac pro Lion 进行 ImageMagick Q16、RVM 和 ruby​​ 1.8.7 的开发

我可以在 IRB 中使用以下内容:

注意“rmagick”这个词中的不同大写

require 'rubygems'
=> true 
require 'rmagick'
=> true 
require 'RMagick'
LoadError: no such file to load -- RMmagick
Run Code Online (Sandbox Code Playgroud)

在我的带有 ImageMagick Q16、RVM 和 ruby​​ 1.8.7 的 Debian Squeeze 6.0 生产服务器上

我可以在 IRB 中使用以下内容:

require 'rubygems'
=> true 
require 'rmagick'
LoadError: no such file to load -- rmagick 
require 'RMagick'
=> true
Run Code Online (Sandbox Code Playgroud)

'gem list' 以小写形式显示在两个操作系统上。

rmagick (2.13.1)
Run Code Online (Sandbox Code Playgroud)

我想知道这个问题的根源是什么?

如果宝石的大小写(如宝石列表中所示)与 require 'some_gem'

小智 5

其根本原因在于Mac OS X 上的文件系统默认不区分大小写。如果需要,您可以在命令行上进行快速测试以确认这一点。

touch testcase
touch Testcase
ls
Run Code Online (Sandbox Code Playgroud)

如果您只看到一个测试用例文件,那么您可能使用的是不区分大小写的 fs。或者,您可以执行以下操作:

diskutil info /
Run Code Online (Sandbox Code Playgroud)

在结果中,如果你看到

File System Personality: Journaled HFS+ 
Run Code Online (Sandbox Code Playgroud)

并不是

File System Personality: Case-sensitive Journaled HFS+.
Run Code Online (Sandbox Code Playgroud)

那么你的不区分大小写。如果您不敏感,那么这就是允许您摆脱要求 'RMagick' 或 'rmagick' 或任何其他大写模式的原因。正如 Cameron 指出您包含的 lib 文件大写,请参阅:https : //github.com/rmagick/rmagick/blob/master/lib/RMagick.rb这意味着当您使用区分大小写的 fs 时,您将不得不

require 'RMagick'
Run Code Online (Sandbox Code Playgroud)

作为

require 'rmagick'
Run Code Online (Sandbox Code Playgroud)

查找不存在的文件。

我已经看到了很多问题,特别是如果您的 git 存储库在同一文件夹中有两个名称相同且大小写不同的文件(对我来说,这导致 git 总是报告未提交的更改)。对于它的价值,我使用磁盘实用程序来创建我安装并用于开发的区分大小写的磁盘映像。这样我就可以保留默认的不区分大小写的 fs 并避免像这样烦人的问题。