0

私はThin、Sinatra、Bundlerの組み合わせで遊んでいます。Thinでソースコードへのパスをロードパスに含める方法を理解しようとしていますか?このセットアップの入門チュートリアルを探しましたが、どれも私の質問に答えていないようです。

ラックアップファイルまたはシン設定ファイルをいじくり回すのは間違っていると感じます。次のようなディレクトリ構造があるとします。

bin/my-application-entry.rb # The entry point to my sinatra application
lib/myapp/mylibs.rb
thin/config.ru # rackup config
thin/dev.yaml  # thin config
Gemfile        # for my dependencies

ラックアップファイルの内容は基本的に

require 'sinatra'
# I'd like to require 'my-application-entry' around here somewhere (I think?)
run Sinatra.application

アプリケーションを呼び出す

thin -C thin/dev.yaml -R thin/config.ru start

thinは特定のライブラリを要求するためにコマンドライン引数を取ることに気づきましたが、すべてのロードパスを定義できるより良い場所は確かにありますか?

だから私の質問は本当に、どのディレクトリを含めるかをシン/ラック/バンドラーにどのように伝えるのですか?(bin/やlib/など)

編集:明確にするために、私はこれが特にThinで一般的にどのように行われるかを本当に知りたいです。メインアプリケーションで$:を変更するのは気が進まないのですが、$:を使用せざるを得ない場合、(シン/ラック/シナトラのコンテキストで)変更するのに最適な場所はどこですか?

4

2 に答える 2

0

$:は、配列として表されるロードパスを記述するグローバル変数です。次のように、「。」を追加して、気になる場合は重複を削除できます。

$:.unshift(".").uniq!

または、リストの最後にプッシュすることもできます。

$:.push(".").uniq!

これは潜在的なセキュリティ上の危険があるため、デフォルトでは省略されることがよくあります。

于 2012-06-21T22:47:24.860 に答える
0

私は同じことを疑問に思っています。私がしていることを説明し、それを正当化しようとします。この記事を書いているうちに、何かが分かってきたのかもしれません。

アプリケーションのエントリ ポイントとしてを使用しているため、今のところ$LOAD_PATHinに追加することにしました。このファイルをプロジェクトのルートに残すつもりなので、これで問題ありません。私はそのような仮定をするのは好きではありませんが、今のところかなり安全に思えます。もちろん、「ええ。このファイルがアプリケーションの唯一のエントリ ポイントであり、常にプロジェクトのルートにあると想定しています」というコメントを残します。config.ruconfig.ru

$LOAD_PATHこれを選択したのは、コール スタックのできるだけ上位に追加したいからです(依存関係逆転の原則) が、アプリを実行するコマンド (Procfile運用環境で実行中、開発環境でthin実行されているコマンド ラインshotgun) で追加すると、私が作成したディレクトリが複製されます。ロード パスに追加します。この重複を必須 (削除する価値がある) と分類するか、偶然 (複製する価値がある) と分類するか? 今のところ、アプリはさまざまなサービスを単一の要求/応答/ルーティング エンジンに統合しているため、少なくとも私が整理することを決定したように、アプリの重要な側面のように見えます。また、config.ruアプリについて説明するので、アプリとして扱うのが理にかなっています。

状況が変化し、本番環境とは異なる開発環境が必要であることに気付いた場合は$LOAD_PATH、ディレクトリをコール スタックの上位に移動し、実行するコマンドに移動しますconfig.ru

この選択に満足しているのは、それが「正しい選択」であると考えているからではなく、どのように、そしてなぜ自分が考えを変えるのかを知っているからです. 私には十分です。

これが役立つことを願っています。

于 2014-04-21T15:52:19.460 に答える