2012-05-07 11 views
20

私は現在Ruby on Railsを使って2つのAPIを構築しています。 1つは読み込み(オブジェクトの検索、クエリ)で、もう1つはキューに実際に書き込むためのもので、キューや別のAPIを持つ複雑なプロセスが含まれています。どちらのアプリケーションも、まったく同じモデルとロジックを必要とします。2 Rails API(個別のアプリケーション)の間で共有するモデル

私の質問は、2レールアプリケーション間でモデル仕様(関係、スコープ、方法)を共有する最も一般的なベストプラクティスまたはアプローチは何ですか?

ありがとうございました!

+0

あなたは両方のAPIでコードを変更することはできますか?またはいくつかの制限がありますか? –

+0

@NigelThorne私は確かに、彼らはどちらも私によって作られています。 – Gotjosh

答えて

4

私はそれを行う方法は「マウント可能なエンジン」です。詳細についてはRailscast by Ryan Batesengine-section at api.rubyonrails.orgをご覧ください。よろしく付き

、マンディ

あなたが見てとることができ
+0

railscastは新しいアプリケーションを対象としていると思われますが、エンジンはコントローラとビューを共有するだけでなく、すでに作成済みの最初のAPIだと思います。 – Gotjosh

+2

@Gotjosh既存のモデルを抽出することができますエンジン(これは宝石に最適にパッケージ化されています)に入れます。そして、あなたの古いアプリにこの宝石を含めるとあなたのモデルは利用可能です。あなたは好きなアプリに宝石を含めることができます。エンジンは自動的にコントローラを提供しません。エンジンは、Railsアプリケーション、モデル、ビュー、コントローラ、アセットファイル(JS、CSS)などの一部または全部を提供することができます。これに関する良い本はJoséValimの "Crafting Rails Applications"です。 –

1

を、あなた他のプロジェクトモデルフォルダをオートロードパスに追加することができますS:でも

# config.autoload_paths += %W(/path/to/a/shared/folder) 

このフォルダをすることができます

rails new test1 
rails new test2 
cd test1 
rails g model User 
cd ../test2/ 
# ACTION REQUIRED: edit config/application.rb adding this line 
# inside the class Application < Rails::Application block: 
# 
# config.autoload_paths += %W(#{config.root}/../test1/app/models) 
# 
mkdir db/migrate 
cp ../test1/db/migrate/*_create_users.rb db/ 
mv db/*_create_users.rb db/migrate/ 
rake db:migrate 
rails r 'puts User.inspect' 
#=> User(id: integer, created_at: datetime, updated_at: datetime) 

はまたプロジェクトにこれを追加すること、第三に共有フォルダを使用して、プライベートとして2つのapp/modelsのフォルダを持っているために、全体を設定することができますプロジェクトごとに同じフォルダではないので、gitサブモジュールへのパスになる可能性があります(GITを使用している場合は、このソリューションをお勧めします)。

別のオプションは、ソフトリンクを共有フォルダに

1

app/modelsを指している可能性があり、これを行うための私のトリックは、実際にRailsのトリックを使用しないことです。私は "git"トリックを使い、第3の共有コードレポからコードを引き出す。私はこれを両方のアプリケーションにエンジンとして、外部のgitリファレンスとして配置します。

これはもう少し作業ですが、一度一度アプリで実行すれば、それを次のテンプレートのテンプレートとしても簡単に使用できます。

+0

他のアプリでそれらを見る前にあるアプリの変更をGitにプッシュしなければならないということはありませんか?どのように新しいものを開発し、テストしますか? 「エンジン」とはどういう意味ですか? – Chloe

0

そのジョブに対してgitサブモジュールを試すことができます。

http://git-scm.com/book/en/Git-Tools-Submodules

+0

Gitサブモジュールは便利ですが、1つの制限は、サブモジュールをHerokuに配置することができないことです。 –

関連する問題