如何通过自制程序分发 ruby​​ 脚本

2023-12-10

如何通过自制程序部署简单的 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(使用前将#替换为@)

如何通过自制程序分发 ruby​​ 脚本 的相关文章

  • 在 Rails 中强制内联渲染 PDF 文档

    我正在编写一个从一组 XML 文件生成 PDF 文件的服务 正在正确生成 PDF 但是 每次我单击 查看 PDF 链接时 浏览器都会要求用户下载 PDF 文件 我需要 PDF 内联显示 就像任何常规 HTML 页面一样 我虽然我写的代码是正
  • 开始使用 Ruby、Watir 和 Ruby Mine?

    我想对电子商务网站进行自动化测试 我安装了 Ruby Watir Gems 和 Ruby Mine 虽然我尝试过 RubyMine 但我不知道如何开始编写一个简单的脚本 如何开始使用 RubyMine 编写简单的脚本 我创建了一个项目 你下
  • Ruby:要散列的数组,没有任何局部变量

    我有一个字符串数组 array foo bar baz 我试图将其转变为以下内容 foo gt nil bar gt nil baz gt nil 我一直在这样做 new hash array each k new hash k nil n
  • 在部分渲染时执行 JavaScript

    我有一些 JavaScript 代码 我想在用户单击其文件夹之一后执行 它会触发 show 操作和 show js erb 从而呈 现部分内容 Show js erb 当用户单击其文件夹之一时触发 如下所示 body append 它成功注
  • Ruby/Rails - 访问“查找”表而不对其进行建模?

    这是针对 Ruby on Rails 3 0 x 项目的 我有一个 查找 表 其中包含来自供应商的数据 当我从其他来源导入数据时 我想检查此表 加入 SKU 以获取额外数据 在我的应用程序中为该表创建模型对我来说似乎不合适 我的应用程序永远
  • Mac Snow Leopard 上的 Curb gem 出现问题

    这消耗了我几个小时的时间 在控制台中我运行 require curb 我收到错误 LoadError dlopen usr local lib ruby gems 1 8 gems taf2 curb 0 5 4 0 lib curb co
  • 如何查看移动设备是否已注册

    我正在使用适用于 Amazon SNS 的 Amazon AWS Ruby SDK 但在已注册的设备方面遇到一些问题 有时 当设备再次注册时 我会收到类似错误AWS SNS Errors InvalidParameter Invalid p
  • “gem install Rails”因 DNS 错误而失败

    rvm use Using home owner rvm gems ruby 2 1 2 gem install rails ERROR While executing gem Gem RemoteFetcher FetchError Er
  • 如果不选择 Updated_at 属性,则无法更新 Rails 4 中的模型

    我正在从 Rails 3 2 13 升级到 4 并遇到更新模型的问题 我正在尝试仅更新模型上的单个属性 其中我只有 id 我还需要验证和回调 这在 Rails 3 中运行良好 但在 Rails 4 中遇到了麻烦 在 Rails 4 中 如果
  • 使用 Ruby 中的 Turn_left 方法更改朝向

    我需要创建一个方法turn left来改变朝向 朝向总是从 南开始 我正在实现一个移动到木板上的机器人 所以如果我调用方法turn left应该将朝向改变为东 然后为北 然后为西 然后返回南方 我在想这样的事情 0 S 1 E 2 N 3
  • 从 /usr/local 卸载 Homebrew 而不影响 /opt/homebrew

    我没有意识到它会导致的问题 因此错误地通过从 Time Machine 备份恢复来设置我的 2021 款 MacBook Pro 我以为我已经解决了所有问题 并且已经愉快地运行了几个月 但我刚刚发现我似乎仍然在 usr local 中安装了
  • 在 Rails 中的帖子中添加“喜欢/不喜欢”按钮

    该网站是一个简单的社区 每个用户都会创建帖子 并且用户可能 喜欢 它们或 不喜欢 它们 我有一个 发帖 和 点赞 模型 目前 我通过 post likes size 列出了所有帖子以及每个帖子的点赞大小 喜欢帖子的按钮也可以使用 我不知道该
  • 如何制作可选的强参数键但过滤嵌套参数?

    我的控制器中有这个 params require item permit 让我们假设这个 rspec 规范 它按预期工作 put update id item id item name new name 然而 以下原因ActionContr
  • 如何使用多个 { 'not find' } 来干燥方法?

    我正在尝试优雅地处理以下错误的 JSON 其中Hash fetch似乎不是一个选择 使用 Hash fetch 优雅地处理错误的 JSON https stackoverflow com questions 25193627 handle
  • 将元数据添加到 PDF

    我需要将元数据添加到我正在创建的 PDF 中prawn http rubygems org gems prawn 该元数据稍后可能会被提取 pdf阅读器 http rubygems org gems pdf reader 该元数据将包含内部
  • Rails:如何重新启动 sidekiq?

    我正在使用 sidekiq gem 在后台运行 API 调用 我在守护进程中运行 sidekiq 如下所示 bundle exec sidekiq d 现在我对我的方法做了一些更改 所以我想重新启动 sidekiq 我尝试使用以下命令杀死
  • ruby 中 for 循环的语法

    如何在 Ruby 中执行这种类型的 for 循环 for int i 0 i
  • 在 Ruby 文档中哪里可以找到字符串转义序列?

    我可以在 中找到有关 Ruby 转义序列的详细信息 红宝石弦 http www tutorialspoint com ruby ruby strings htm and 转义序列 http en wikibooks org wiki Rub
  • 使用 FactoryGirl 测试简单的 STI

    我有一个类 它是其他一些专门处理该行为的类的基础 class Task lt ActiveRecord Base attr accessible type name command validates presence of type na
  • Rails 中的命名空间模型生成 NameError:未初始化的常量

    我有一个这样的文件夹结构 app models bar foo rb connection rb foo rb connection rb是一个用于连接到另一个数据库的 抽象类 所以 class Bar Connection lt Acti

随机推荐