如何通过自制程序部署简单的 ruby 脚本?
这是我尝试过的
在名为的 GitHub 存储库中编写公式homebrew-foo
# file https://github.com/foo/homebrew-foo/blob/master/foo.rb
class Foo < Formula
desc "A command line tool"
url "https://github.com/foo/foo/archive/master.zip"
version "5.0.1"
def install
bin.install "foo"
lib.install Dir["lib/*"]
end
end
另一个存储库包含 ruby 脚本。这些是文件
./foo
./lib/libfile1.rb
这是脚本的作用
#!/usr/bin/env ruby
require './lib/libfile1.rb'
puts "came here"
问题是require
fails.
$ brew install foo/foo/foo
$ foo
结果出现这个错误
/Users/user1/.rbenv/versions/2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:inrequire': cannot load such file -- ./lib/libfile1.rb (LoadError)
from
/Users/user1/.rbenv/versions/2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in
需要来自 /usr/local/bin/foo 的'
$ which foo
/usr/local/bin/foo
我怀疑这是因为 .rb 文件不存在/usr/local/bin/foo/lib/libfile1.rb
有什么想法可以做到这一点的正确方法吗?
您的脚本有两个问题:
第一个是你尝试require
一些文件相对于current目录;即运行脚本的那个,not它所在的那个。这个问题可以通过使用来解决Ruby’s require_relative:
#!/usr/bin/env ruby
require_relative './lib/libfile1.rb'
puts "came here"
第二个问题是脚本假设lib/
目录位于其目录中;这不是因为你的公式将脚本安装在<prefix>/bin/
以及下面的库文件<prefix>/lib/
。 Homebrew 有一个针对该用例的助手,名为Pathname#write_exec_script。它允许您在一个目录下安装所需的所有内容,然后在下创建一个可执行文件bin/
调用你的脚本。
您的公式现在如下所示:
class Foo < Formula
desc "A command line tool"
url "https://github.com/foo/foo/archive/master.zip"
version "5.0.1"
def install
libexec.install Dir["*"]
bin.write_exec_script (libexec/"foo")
end
end
它安装了下面的所有内容libexec/
(lib/
通常为lib文件保留),然后在下面添加一个可执行文件bin/
这叫你的libexec/foo
script.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)