2017-07-16 82 views
0

如何通過自制軟件部署簡單的紅寶石腳本?如何通過自制軟件發佈紅寶石腳本

這裏就是我試圖

名爲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腳本GitHub庫寫公式。這些文件

./foo 
./lib/libfile1.rb 

這裏就是劇本確實

#!/usr/bin/env ruby 
require './lib/libfile1.rb' 
puts "came here" 

的問題是require失敗。

$ 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:in require': 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

任何想法什麼是正確的方法來做到這一點?

回答

1

你的腳本有兩個問題:

第一個是你試試require一些文件相對於目前目錄;即,從腳本運行一個,的一個它位於這個問題可以固定使用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腳本下添加可執行文件。

0

我找到了答案,以我自己的問題,實際上這是在網絡上使用別人的技術,基本上做這樣的事情

#!/usr/bin/env ruby 
DBMGR_HOME = File.expand_path('../..', __FILE__) 
$LOAD_PATH.unshift(File.join(DBMGR_HOME, 'lib')) 
require 'dbmgr' 

和配方可以是這樣的:

https://github.com/callahanrts/homebrew-dbmgr/blob/master/dbmgr.rb