2017-07-16 4 views
0

homebrewを使って簡単なrubyスクリプトを配布するにはどうすればよいですか?homebrew経由でrubyスクリプトを配布する方法

は、ここで私は

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 

がここにスクリプトに問題がrequireが失敗したということです

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

を何だファイルです。このエラーで

$ 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 は、私は.RBファイルが/usr/local/bin/foo/lib/libfile1.rb

に存在しないからだと疑う

$ which foo 
/usr/local/bin/foo 

は/ usr/local/bin/fooのから「必要

これを行うには適切な方法はありますか?

答えて

1

スクリプトには2つの問題があります:

最初にお試しになりましたrequire現在のファイルディレクトリ;つまり、スクリプトが実行されてから1、それはに位置しない 1は、その問題が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というユースケースのヘルパーがあります。 1つのディレクトリに必要なものすべてをインストールし、スクリプトを呼び出す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ファイル用に予約されている)、そして、あなたのlibexec/fooスクリプトを呼び出しbin/の下で実行可能ファイルを追加します。

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 
関連する問題