4

ソフトウェア パッケージがあるとします。gem は、Ruby の世界であらゆるものを配布するための事実上の標準的な方法であるため、それを gem にしたいと考えています。ジェムはライブラリにとって素晴らしいものです。しかし、実際のアプリケーションでは、Rubygems システムが不足しているようです。実行可能ファイルをシステム全体の実行可能 PATH のどこかに配置するようにマークする方法が導入されたのは、「最近」だけです。残念ながら、Ruby gem は、ソフトウェア パッケージの他の側面、つまり構成ファイルを /etc のような場所に配置したり、ドキュメントを /usr/share/doc の下に配置したりする必要があるようです。またはそれは?私の質問は:

設定を /etc にインストールするように指示やコードを gemspec に入れたり、適切な標準化された場所 (/usr/share/doc など) の下にドキュメントを入れたりすることはできますか? または、回避策として、インストール後のスクリプトを実行してこれらのことを行うことはできますか?

参考までに: GemSpec 仕様.

この記事の執筆時点では ruby​​gems.org がダウンしていることに注意してください。そのページの Google キャッシュは次のとおりです。 20%23page85&hl=ja&ct=clnk&cd=1

repo の specification.rb ファイルを調べて、最後までスクロールすると (「:section: Required gemspec attributes」を検索)、現在サポートされていると思われる属性を確認できます。そこには、私が望むもののように見えるものは何もありません。

4

3 に答える 3

1

これをしたくない/する必要はありません...宝石はライブラリとして使用するように設計されています...それ自体のアプリケーションとしてではありません(そのタイプのディストリビューションアプリケーションパッケージシステムを調査してください)。

あなたはそれを知っています。そして、私はそれを知っています。しかし、「彼ら」はそれを知りません。多くの月の定期的な質問とコメントは、「宝石はありますか?」というものでした。「これはgemとしてインストールできますか?」「宝石を作ってみませんか?」「これは gem ではないため、インストールしませんでした。」

正しいかどうか、望ましいかどうかに関係なく、Joe Rubyist はすべてが宝石化されることを期待しています。「ruby setup.rb」タイプの取引に慣れていて、許容しているように見えるのは、年配の学生だけです。

とにかく、私のアプリケーションは実際にはスタンドアロン アプリケーションです。図書館のようにこれを含む人はほとんど想像できません。アプリケーションのコレクションの一部としてかもしれませんが... ライブラリとしての使用はかなり無理があるようですが、その日が来たら、橋に着いたときに橋を渡ります (競合がある人を助けるために)含まれる可能性があります)。

また、「dev/test/stage/prod」の区別はありません。これはプレーン オールド アプリです。コマンド ラインから実行します。

とにかく、あなたのコメントに感謝します.Rubygemsシステムはこれを行う方法を提供していないという点で、少なくとも私の仮定は確認されています.

于 2008-12-15T14:43:17.173 に答える
1

2015-11-11 状況は次のとおりです。RubyGems は、コマンドの拡張機能として、インストール前およびインストール後のフックをサポートしていgemます。つまり、これらのフックは、インストールされているすべての gem に適用され、特定の gem でカスタマイズされることを意図していません。operating_system.rbそれらは、通常/usr/lib64/ruby/2.2.0/rubygems;にある ;と呼ばれるファイルで呼び出されます。またはRubyがインストールされている場所とバージョン。フックは次のように使用されます。

# /usr/lib/ruby/x.y.z./rubygems/operating_system.rb
Gem.pre_install do | installer |
  # do whatever
end

Gem.pre_uninstall do | installer |
  # do whatever
end

Gem.post_install do | installer |
  # do whatever
end
. . .

API ドキュメントをさらに詳しく調べると、gem に固有の外部アクティビティを使用するために、プラグインが利用可能になっているようです。例として、 http : //guides.rubygems.org/plugins/#executablehooksおよびhttps://github.com/rvm/executable-hooksを参照してください。ただし、これらはすべて、特定の gem ではなく、RubyGem アプリケーション全体に影響を与えるようです。そして、そのようなプラグインを有効にするには、gem 自体としてインストールする必要があります。

gem 固有の pre および post install フックはセキュリティ上の問題のようです。システム レベルの Gem をインストールする人は、定義上 root 権限を持っており、RubyGem が単にライブラリをインストールする以外に任意のアクションを実行できるようにすると、明らかにセキュリティに影響します。

これについては、Ruby 関係者に確認しています (2015-11-10)。これらのフックは、RubyGem 自体を異なるプラットフォームにインストールするユーザーのみが使用するためのものである可能性があります。

RubyGems は現在 (2015) &block を引数とするメソッドとしてpre_install()andフックをサポートしています。post_install()おそらく、どちらからも戻らないという条件で、これらのいずれかでやりたいことを何でもできますfalse。返品nilは問題ありませんが、false返品すると gem のインストールが中止されます。

于 2015-11-09T17:48:58.597 に答える
1

短い答え:いいえ

長い答え:これをしたくない/する必要はありません...宝石はライブラリとして使用するように設計されています...それ自体のアプリケーションとしてではありません(そのタイプのディストリビューションアプリケーションパッケージシステムを調査してください)。さらに、あなたの宝石が「一度だけ」使用されると仮定することはできません...理論的には、いくつかのプロジェクト/アプリケーションにあなたの宝石が含まれる可能性があります。さまざまなフェーズ環境 (開発/テスト/ステージ/運用) で動作するようにアプリケーションを開発/構成するなど、他のアーキテクチャの問題があるため、まだそれを行いたくないでしょう。あなたがたどり着く可能性のある最良のケースは、README で /etc/ 構成ファイルを作成する方法に注目し、ユーザーに値を求めるプロンプトを出すユーティリティ アプリケーションを含めることです。

于 2008-12-15T10:00:35.687 に答える