私は現在、RubyonRailsを使用して2つのAPIを構築しています。1つは読み取り(オブジェクトの検索、クエリ)用で、もう1つは実際に書き込むためのもので、キューと別のAPIを使用した一種の複雑なプロセスが含まれます。どちらのアプリケーションにも、まったく同じモデルとロジックが必要です。
私の質問は、2つのレールアプリケーション間でモデルの仕様(関係、スコープ、メソッド)を共有するための最も一般的なベストプラクティスまたはアプローチは何ですか?
ありがとうございました!
私は現在、RubyonRailsを使用して2つのAPIを構築しています。1つは読み取り(オブジェクトの検索、クエリ)用で、もう1つは実際に書き込むためのもので、キューと別のAPIを使用した一種の複雑なプロセスが含まれます。どちらのアプリケーションにも、まったく同じモデルとロジックが必要です。
私の質問は、2つのレールアプリケーション間でモデルの仕様(関係、スコープ、メソッド)を共有するための最も一般的なベストプラクティスまたはアプローチは何ですか?
ありがとうございました!
あなたは見ることができます:
私がそれをする方法は「マウント可能なエンジン」です。スターターについてはRyanBatesによる優れたRailscastを、詳細についてはapi.rubyonrails.orgのエンジンセクションを確認してください。
よろしくお願いいたします。マンディ
モデルを共有したいだけの場合は、他のプロジェクトモデルフォルダーを自動読み込みパスに追加できます。
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)
3番目の共有フォルダーを使用して、2つのapp/models
フォルダーをプライベートとして設定し、これをプロジェクトに追加することもできます。
# config.autoload_paths += %W(/path/to/a/shared/folder)
このフォルダーは、プロジェクトごとに同じフォルダーではない場合もあるため、たとえば、gitサブモジュールへのパスである可能性があります(GITを使用する場合は、このソリューションをお勧めします)。
別のオプションはapp/models
、ソフトリンクで共有フォルダを指すことです。
これを行うための私のトリックは、実際にはRailsのトリックを使用しないことです。私は「git」トリックを使用し、3番目の共有コードリポジトリからコードをプルします。私はこれをエンジンとして、そして外部のgitリファレンスとして両方のアプリに入れました。
もう少し手間がかかりますが、1つのアプリで一度実行すると、次のアプリのテンプレートとしても簡単に使用できます。
その仕事のためにgitサブモジュールを試すことができます。