Rails 5 API アプリを、API とアプリの両方として機能できる Rails アプリに変換するにはどうすればよいでしょうか? 質問する

Rails 5 API アプリを、API とアプリの両方として機能できる Rails アプリに変換するにはどうすればよいでしょうか? 質問する

最初は --api タグを使用して Rails 5 で作成しました。

からrubyonrails.org/api_app.html を参照してください。

私は削除しましたconfig.api_only = true

私が変更され

class ApplicationController < ActionController::API
end

class ApplicationController < ActionController::Base
end

私が現在抱えている問題は、ビューがレンダリングされるとき、たとえばwelcome/index.html.erb、対応する CSS ファイルがレンダリングassets/stylesheets/welcome.css.scssされないことです。

これを修正する方法、またはより一般的には API アプリケーションを完全なアプリに変換する方法はありますか?

ありがとう!

ベストアンサー1

私も同じ問題に遭遇しましたが、解決できたと思います。変換するためのシンプルな Rails ジェネレーターを見つけたいと思っていましたが、何か見落としがない限り、それほど簡単ではありません。ただし、Rails を使用すると、完全に手動で行うよりも簡単になります。

重要なのは、rails newコマンドが既存のアプリで使用できることです。この回答は、git の使い方を知っていて、既存のアプリで使用していることを前提としていることに注意してください。

まず、最も重要なのは、新しいブランチを作成することです。これには 2 つの機能があります。1) 作業に失敗しても作業内容が失われないようにするため (ただし、GitHub などにバックアップしておくのがよいでしょう)、2) このプロセス後に競合のあるファイルを比較し、このプロセスで上書きされた作業内容を取得できるようにするため (私にとっては大したことではありませんが、重要でした)。

ターミナルで、API のみから標準に変更するアプリのディレクトリから、以下のコマンドを実行して 1 つ上のディレクトリに移動し、既存のプロジェクトの上に新しいプロジェクトを Rails で書き込むようにします。2 番目のコマンドでは、最初にアプリを作成したときに使用したのと同じオプションを使用します。たとえば、私の場合は、[options]以下を に置き換えました-d postgresql --skip-turbolinks --skip-spring -T。これは、アプリを作成したときに使用したオプションだからです。--skip-bundleフラグを使用しているのは、Gemfile が意図した以上に変更される可能性があり、バンドルする前に一部を元に戻したい場合が多いためです。

$ cd ..
$ rails new your_app_name --skip-bundle [options] 

ここで、Rails は新しいアプリのすべてのファイルを作成する通常のプロセスを実行しますが、今回は、すでに存在しているため、ほとんどのファイルをスキップします。競合があるファイルごとに停止し、そこで競合を 1 つずつ分析する必要があります。

競合したファイルに対して私が効果があった方法は次のとおりです:

  1. dそれぞれを送信して違いを確認してください。
  2. 違いが行の追加だけであれば、 で許可しますY。結局のところ、これがこれを行う理由です。
  3. 違いがコードの削除のみである場合は、 で拒否しますn
  4. 違いがコードの追加と削除の両方である場合は、このプロセスの後に戻るためにそのファイルを書き留めます。その後、 でそれを承認しますY

これが完了したら、git を使用して、書き留めた (4) の各ファイルの違いを調べます。rails によって追加された変更は保持する必要がありますが、削除されたコードはすべてコピーして戻す必要があるでしょう。これにはおそらく Gemfile が含まれます。

注目すべき違いの 1 つは、Rails がアプリケーション コントローラーを から継承する に変更することですActionController::APIActionController::Baseそれぞれに 1 つのコントローラーが必要なため、新しいファイル `app/controllers/api_controller.rb' を作成しました。次に、元の ApplicationController にあった内容を新しいファイルにコピーし、クラス名を ApiController に変更しました。次に、既存のすべての API コントローラーを、ApplicationController からではなく新しい ApiController から継承するように変更しました。

それが完了したら、実行して、bundle installアプリに追加された gems rails をインストールします。

私にはうまくいきました。お役に立てれば幸いです。頑張ってください!

おすすめ記事