2011-02-08 9 views
2

私はLoversというFacebookアプリの新しいバージョンをビルドしています。 Lovers source code on GitHubが見つかります。私はFacebookと一緒にカスタム宝石を建てています。私はこのカスタムFacebookの宝石に加えた変更を即座に恋人に施して欲しい。Sinatraで宝石を使うには?

ディレクトリ構造を整理する正しい方法は何ですか?現在のところ、それはそうのようになります。

|- config.ru 
|- features 
    |- support 
    |- env.rb 
|- lib 
    |- lovers 
    |= lovers.rb 
|- vendor 
    | - facebook 
    | - lib 
     |- modules/classes here 

私はconfig.ru & env.rbから$LOAD_PATH./vendor/facebook/libを追加しました。それは動作していますが、これを行うにはinit.rbファイルを使用する必要がありますか?ベストプラクティスは何ですか?

答えて

1

あなたはvendor/facebookであなたの宝石を入れ、シモーネCarlettiが提案されているようバンドラーを使用しますが、その代わりにRubyGemsからあなた宝石を引っ張って、あなたはどこからあなたの宝石をロードするためバンドラを伝えるために、:pathオプションを使用することができます可能性があり。

これを使用すると、宝石をプロジェクトのツリーから横に並べて展開することもできます。これに夫婦他の問題があります

gem 'facebook', :path => '../facebook' 

あなたGemfileのようなものが含まれます。あなたの宝石を管理するためにバンドラーを使用するためには

  1. 、あなたの逸品.gemspecファイルを必要とします。 gemspecは、宝石の情報、バージョンや依存関係などを指定します。 docs on itをチェックしてください。

  2. すでに宝石が入っています。facebookという名前が付いています。そのため、あなたの宝石には別の名前を付けたいと思うかもしれません。

+0

これは素晴らしいですね。ありがとう!私はこれを試してみる。 – ma11hew28

2

vendorフォルダを作成する代わりに、Bundlerを使用します。

Gemfileを作成し、すべての要件を定義します。 は、その後、次のコード

require "rubygems" 
require "bundler/setup" 

Bundler.require(:default, (ENV["RACK_ENV"] || :development).to_sym) 

あなたlovers.rbファイルの場所で、私は通常ルートフォルダにboot.rbファイルを作成し、ロードパスにlibを追加することがコードを移動します。

# boot.rb 
$:.unshift(File.dirname(__FILE__) + "/lib") 

require "rubygems" 
require "bundler/setup" 

Bundler.require(:default, (ENV["RACK_ENV"] || :development).to_sym) 


# lib/lovers.rb 

require "boot" 
... 
+0

なぜですか? Facebookの宝石を変更して、その変化がどのように恋人に影響を与えるかをすぐに確認することは、それを難し​​くしないでしょうか?だから私は最初にFacebookの宝石を束ねなければならないのだろうか? 'vendor'ディレクトリでは、変更は直ちに有効になります。 – ma11hew28

+0

サードパーティライブラリを自分で変更することはお勧めできません。このアプローチは、アップグレードを本当の悪夢にするでしょう。 –

+0

サードパーティのライブラリではありません。 Facebookの宝石は、Railsと並んでActiveRecordがどのように構築されているのと同様に、私がLoversと一緒に構築している宝石です。私の質問を読んでください。 – ma11hew28

1

行動駆動型開発(BDD)のアプローチは、あなたのFacebookの宝石を別のソースツリーに構築し、RSpecまたは他のテストハーネスでテストすることだと思います。

Gemが機能的に有用な繰り返しに達したら、Bundlerを使用してアプリケーションに組み込みます。

+0

なぜそれが「Ruby Way」なのか、つまりその理由は何ですか? The Facebookの宝石を更新するのは苦痛だと思われる。機能は決して完全ではありません。常に変化しています。 – ma11hew28

+0

私は実際にGemを開発するBehavior Driven Developmentの方法を説明しました(私は私の答えを更新しました)。私は認めなければならない、私は今この方法を採用し始めている。これは、開発に長い反復的なアプローチを考慮に入れています。 –

関連する問題