我正在用 Ruby 编写一个 IDE,当我在命令行上运行该程序以及将其安装为 Rubygem 时,我对如何让我的所有文件都获得“必需”感到困惑。
我的 Rubygem 中有一个名为“vr”的可执行文件。我需要使这个“vr”可执行文件“需要”我项目中的所有其他文件。
当我在开发时,很容易需要我所有的项目文件。我只是像这样“要求”它们的相对路径:
require_all Dir.glob(File.expand_path(File.dirname(__FILE__)) + "/../bin/**/*.rb")
require_all gem 将完美运行。但是,当我将此程序安装为 rubygem 时,我遇到了一个大问题。当我的“vr”可执行文件由 rubygems 安装时,它会将“vr”可执行文件复制到一个特殊目录:
/home/eric/.rvm/gems/ruby-1.9.3-p125/bin
该目录与我项目的根文件夹完全分开。因此,“require”语句不再找到我所有项目的文件。
Rubygems 为我的 gem 的根目录创建了这个目录:
/home/eric/.rvm/gems/ruby-1.9.3-p125/visualruby-0.0.55
我需要能够将该目录中的所有文件“要求”到我的项目中。
到目前为止,我的解决方案是制作第二个名为“visualruby.rb”的文件,该文件位于我项目的 lib 文件夹中。它有 require_all 语句来要求所有项目文件。然后我只需要通过将此代码添加到我的“vr”可执行文件中来将可执行文件链接到它:
base_file = File.dirname(__FILE__) + '/lib/visualruby.rb'
if File.file?(base_file)
require base_file #load from project
else
require 'visualruby.rb' #load from gem
end
有必要检查相对于当前文件是否有一个名为“visualruby.rb”的文件,因为当我开发时,它总是会找到已安装的gem版本的“visualruby.rb”所以当我对文件进行更改时, 没有效果。我必须强制它从我的开发项目中加载版本才能使更改生效。
此外,我的 IDE 从头开始创建项目,因此很高兴知道对此的一般解决方案。我希望所有项目都有一个一致的项目文件系统,但我不确定这是否可能。我有为所有项目创建一个名为“requires.rb”的文件的通用解决方案,但我认为它不会起作用,因为每个项目都会将相同的文件名添加到 $LOAD_PATH。
请帮助我了解如何在我可以开发和制作 rubygems 的地方制作一致的文件结构。