大部分情况下,RubyGems 会为您解决这个问题。您需要将您的可执行文件包含在files
列表中,并将其放入executables
您的 gemspec 中。将您的可执行文件放在bin
您的目录中是很常见的,例如:
$ ls
bin/ myapp.gemspec lib/ Rakefile
$ ls bin
bin/myapp
然后,您的 gemspec 将如下所示:
Gem::Specification.new do |s|
s.name = 'myapp'
# whatever else is in your gemspec
s.files = ["bin/myapp","lib/myapp.rb"] # or whatever other files you want
s.executables = ["bin/todo"]
end
此时,当用户通过 RubyGems 安装您的应用程序时,myapp
将在他们的路径中,并将lib
在您的应用程序的加载路径中,因此您的可执行文件可以简单地开始:
#!/usr/bin/env ruby
require 'myapp'
# whatever other requires
唯一的问题是,在开发过程中,您不能只做bin/myapp
并让您的应用程序运行。$:
一些开发人员通过or操作加载路径$LOAD_PATH
,但这被认为是错误的形式。
如果您使用的是 bundler,最简单的方法是在本地运行您的应用程序bundle exec
,例如bundle exec bin/myapp
. 您可以交替使用RUBYLIB
环境变量,例如RUBYLIB=lib bin/myapp
,它将放入lib
加载路径。