web-dev-qa-db-ja.com

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

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

から http://edgeguides.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アプリケーションを完全なアプリに変換する方法はありますか?

ありがとう!

20
Laser

私はこれと同じ問題に遭遇し、私はそれを解決したと信じています。変換するための単純な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::APIからActionController::Baseに継承するように変更することです。それぞれに1つのコントローラーが必要なので、新しいファイル `app /を作成しました。次に、元のApplicationControllerにあったものを新しいファイルにコピーし、クラス名をApiControllerに変更しました。次に、既存のすべてのAPIコントローラーを、ApplicationControllerからではなく新しいApiControllerから継承するように変更しました。

その後、bundle installを実行して、アプリに追加されたgem Railsをインストールします。

それは私のために働いた。お役に立てば幸いです。幸運を!

20
Calaway

Apiアプリケーションの外部のディレクトリ(その親など-cd ..)から

Rails new comparison_real_app

次に、comparison_real_appの内容をアプリと比較し、不足しているファイルをapiアプリにコピーし、必要に応じて他のファイルを変更します。

4
Michael Durrant

したがって、私(あなた)が進むにつれて、おそらくもっと多くのことを行う必要がありますが、スタイルシートの問題を解決するには、views/layouts/application.html.erbファイルとassets/stylesheets/application.cssファイルを手動で作成する必要があります。

1
Laser