4

私は.NetMVCのバックグラウンドから来ており、RoRでプロジェクトを実行しようとしています。具体的には、RESTAPIを開発しています。

私の考えを説明します。うまくいけば、あなたは私を正しい方向に導くことができます。私のAPIはバージョンをサポートしている必要があり、APIをバージョン管理する最も堅牢な方法は、バージョンごとにコードを複製することです。そうすれば、あるバージョンで問題を修正しても、他のバージョンには影響しません。.NET MVCでこれを行う場合、各バージョンのソースファイルはエリアを使用して適切にセグメント化できるため、エリアは親友です。

だから私の質問は:RoRではこの階層がこの階層になるようにディレクトリ構造を変更することは可能ですか?

app/
  controllers
    /v1
      c1_controller.rb
      c2_controller.rb
    /v2
      c1_controller.rb
      c2_controller.rb
  models/
    /v1
      m1.rb
      m2.rb
    /v2
      m1.rb
      m2.rb
  views/
    /v1
      view1.html.erb
      view2.html.erb
    /v3
      view1.html.erb
      view2.html.erb

これに再配置できますか?

app/
  v1/
    controllers/
      c1_controller.rb
      c2_controller.rb
    models/
      m1.rb
      m2.rb
    views/
      view1.html.erb
      view2.html.erb
  v2/
    controllers/
      c1_controller.rb
      c2_controller.rb
    models/
      m1.rb
      m2.rb
    views/
      view1.html.erb
      view2.html.erb
4

3 に答える 3

10

このページをチェックアウトすると、Rails3+プロジェクトのディレクトリ構造に関する洞察が得られます。

http://edgeapi.rubyonrails.org/classes/Rails/Engine.html

Rails 3.0以降、アプリケーションとエンジンのパス構成は、以前のハードコードされたパス構成とは対照的に、より柔軟になっています。つまり、コントローラーをアプリ/コントローラーに配置する必要はありませんが、便利な場所に配置する必要があります。

それがエンジンに関するものであるという事実を恐れないでください、それは最初に述べています:すべてのRailsアプリはエンジンです。

更新:自分でそれを行う機会はありませんでしたが、そのページとこれconfig/application.rbによると、あなたはあなたの中に次のものを追加する必要がありますclass Application < Rails::Application

config.paths["app/controllers"] << "app/v1/controllers"
config.paths["app/controllers"] << "app/v2/controllers"
config.paths["app/controllers"] << "app/v3/controllers"

config.paths["app/models"] << "app/v1/models"
config.paths["app/models"] << "app/v2/models"
config.paths["app/models"] << "app/v3/models"

config.paths["app/views"] << "app/v1/views"
config.paths["app/views"] << "app/v2/views"
config.paths["app/views"] << "app/v3/views"

例としてこのプロジェクトを確認してください:https ://github.com/forker/multiversion

于 2012-05-07T10:07:06.603 に答える
2

少し間違った場所で問題を解決しようとしているのではないかと思います。アプリケーションの複数のバージョンを同時にサポートする必要があり、それらを個別に修正できるようにする必要がある場合など、バージョン管理にgitを使用し(まだ行っていない場合)、バージョンごとに個別のブランチを作成するのは、次のように聞こえます。私に行きます。(Mercurial、SVNなどでも同様のことができると確信していますが、GitはRailsのデファクトスタンダードのようです)。

ブランチに関する情報へのリンクは次のとおりです:http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging

于 2012-05-09T23:40:05.183 に答える
0

シンボリックリンクをサポートするシステムを常に使用している場合は、シンボリックリンクだけを使用する方が簡単な場合があります。

app/controllers/v1 -> app/v1/controllers
app/models/v1 -> app/v1/models
app/views/v1 -> app/v1/views

など。あるいはその逆。

その後、Railsはapp/controllers/v1/c1_controller.rb通常どおりに読み取り、V1名前空間( " class V1::C1Controller")にあると想定します。

リンクを相対的なものにすることを忘れないでください。

于 2012-05-09T23:28:34.613 に答える