2

有効なgemスペックファイルを含むRubyGemに必要な構造を満たすRubyプロジェクトを作成し、それをGitリポジトリでホストしているが、まだファイルに組み込んでいないmyproject.gem場合、厳密に言えば、それはまだgemですか?

結局のところ、オプションが使用されたgem installとしても、それをインストールすることはできません。--source

NB。Bundlerがそのようなプロジェクトをインストールできることを私は理解しています。

4

2 に答える 2

4

RubyGems Guidesによると、gem には以下が含まれます。

  • コード

    Ruby コードなしで Ruby プロジェクトを作成することはできません。

  • ドキュメンテーション

    プロジェクトの README ファイルとソース コードのコメントから自動的に生成されます。

  • ジェム仕様

    プロジェクトのメタデータ。

この定義を考えると、Ruby プロジェクトと gemの唯一の違いは仕様であることがわかります。

実際、パッケージ化プロセス全体は仕様から始まります。

  1. あなたはファイルをフィードgem buildします.gemspec
  2. Gem::Specification有効な Ruby コードであるファイルを評価し、オブジェクトを取得します。
  3. 仕様にリストされているファイルをアーカイブに追加します
  4. コンパイルされた仕様を 2 番目のアーカイブに追加します
  5. ファイルを作成します.gem。これは、これら 2 つのアーカイブのコンテナーにすぎません。

パッケージを開けると.gem、何が入っていますか?

gem パッケージを開く

プロジェクト ファイルとメタデータ。ええ、それは基本的にそれです: たくさんのプロジェクトメタデータが含まれている美化された tarball です。

それ自体は、プロジェクト ツリー全体を圧縮してダウンロード用に配置するか、最新のコミットに現在のバージョンのタグを付けて、GitHub からアーカイブを取得するように人々に指示するのとまったく同じです。

通常のソフトウェア ソース パッケージと gemの唯一の違いは、 RubyGems ソフトウェアがパッケージ内に含まれる情報を使用して、自動パッケージ管理、依存関係の解決、リモート リポジトリからのインストールなどを提供できることです。rpmRed Hatや Debianなど、他のパッケージ形式についても同じことが言えますdeb

agemは技術的にはソフトウェア パッケージ自体ですが、この名詞は非公式に、a としてパッケージ化できるプロジェクト全体、gemつまり gem 仕様を持つプロジェクトを指すためにも使用されます。RubyGems.org やその他のリモート gem リポジトリにプッシュされたかどうかは問題ではありません。仕様を使用してgemパッケージを生成したり、プロジェクトに関する情報を抽出したりできるからです。

たとえば、 Gemnasium.gemspecは、パッケージを生成またはダウンロードせずに、gem の依存関係を特定および追跡するために解析するサービスです。

于 2012-06-19T19:10:39.390 に答える
2

gemspecを使用したプロジェクトがgemになりました。プロジェクトがrubygems.orgにないからといって、それがgemと呼ばれることを妨げるべきではありません。最終的に、rubygems.orgはgemのリポジトリであり、使用する必要はありません。Githubリポジトリまたはその他のリポジトリは別のソースとして表示できます。また、gemがGemファイルに組み込まれている必要はありません。

于 2012-06-19T18:13:14.977 に答える