0

私が本当に理解していないことの1つは、カスタム起動オプションをmongrelインスタンスに渡す方法です。

一般的なアプローチは環境変数の使用であることがわかりますが、私の環境では、Railsアプリケーションが多くの異なるクライアントにサービスを提供しているため、これは機能しません。多くのコードはクライアント間で共有されますが、既存の機能をオーバーロードまたは拡張したり、新しい機能を導入したりするためにコントローラーとビューをサブクラス化することによって実装する多くの違いもあります。これをすべて機能させるには、クライアント固有のモジュールへのパスをモジュールのロードパス($:)に追加するだけです。

特定のクライアントのアプリケーションを起動するために、TARGET=AMAZONEなどの環境変数を使用できるようになりました。残念ながら、一部のシステムでは、複数の雑種クラスターを実行しており、各クラスターは異なるクライアントにサービスを提供しています。これらのシステムのいくつかはWindowsで実行され、mongrelを起動するためにmongrel_servicesをインストールしました。明らかに、これは私の環境変数を不適切にします。

この余分なデータをアプリケーションに渡すことは、実際の課題であることが証明されています。まず、mongrel_rails service_installは、文書化されていない[カスタム]コマンドラインパラメーターを拒否します。インストールプログラムを使用してサービスをインストールするのは簡単なので、私はあまり心配していません。

ただし、実行時にカスタムコマンドラインオプション--targetをmongrel_rails startに渡すようにmongrel_servicesをインストールしても、mongrel_railsがスイッチを認識しないため、エラーが発生します。

だからここに私が見たものがありました:

  1. 追加のパラメーターを渡します。

    mongrel_rails start --targetXYZ..。

  2. 構成ファイルを使用してtarget:XYZを追加してから、次の手順を実行します。

    mongrel_rails start -C x:\ myapp \ myconfig.yml

  3. ファイルを変更します。

    Ruby \ lib \ ruby​​ \ gems \ 1.8 \ gems \ mongrel-1.1.5-x86-mswin32-60 \ lib \ mongrel \ command.rb

  4. おそらく--scriptオプションを使用できますが、その上で見つけたすべてのドキュメントはUnix用でした

1と2は単に機能しません。私は4で遊んだが、何もできなかった。ですから、3を使うしかありませんでした。比較的単純ですが、rubyライブラリのコードを変更するのは嫌いです。

特に残念なのは、2が機能しないことです。設定ファイルに他の[カスタム]オプションを追加するのはどうしてそんなに不合理なのですか?実はこれはレールに欠けている基本的な部分だと思います。どういうわけか、アプリケーションは、期待するコマンドライン引数を登録してアクセスできる必要があります。

現在のインフラストラクチャを使用してこれをよりエレガントに行う方法を誰かが知っているなら、私はチョコレートの魚をプレゼントします!!!

4

1 に答える 1

0

雑種に何かを渡す必要はないかもしれません。必要な柔軟性を提供する既存のメカニズムを使用できる場合があります。制約について明確にすることから始めましょう。

言い換えれば、以下の条件が成り立っているようです。

  • 複数の顧客にサービスを提供するために、同じコード ベース (または非常に類似したコード ベース) が使用されます。
  • アプリケーションの動作を定義するには、アプリケーションの起動時 (または実行前) にアプリケーションの実行に影響を与える識別子が必要です。
  • 複数の雑種クラスターのセットを単一のシステムで使用でき、各クラスターは単一のクライアント専用です
    • これは、プロセスのクラスターがすべて、同じ構成値を持つ同じコード ベースを提供していることを意味します。
  • 一部の顧客は、一部の Unix スタイル環境とスクリプト動作の使用を不要にする Windows サーバーで実行したいと考えています。

検証する必要がある 1 つの仮定は、各コード ベースが個別のディレクトリにあるということです。もしそうなら、非常に簡単な解決策があるかもしれません。

各顧客が独自のディレクトリにある場合、次のようになります。

/src
  /customer1
  /customer2
  /customer3

そして、雑種プロセスを次のようなもので開始すると:

[/src/customer1]$ mongrel_rails cluster::start

次に、customer_config.ymlシステムの起動時に読み込まれるファイル (environment.rb 内) を作成し、そこにクライアントのカスタマイズ値を配置できます。したがって、ターゲット値として「Amazone」を渡す必要がある場合、yaml ファイルは次のようになります。

target:
  Amazone

次に、各顧客はそれぞれのディレクトリにのみ存在する独自の customer_config.yml ファイルを取得し、新しい顧客を追加するときに動作を切り替えるために変更するファイルは 1 つだけです。

特に名前が付けられた YAML ファイルを探すように environment.rb を変更することは、まったく問題ありません。YAML ファイルを解析するのはかなり簡単で、各顧客によるカスタマイズを管理するための柔軟性が大幅に向上します。

于 2010-04-07T21:33:21.860 に答える