Rails APIモードでGem "rails-admin"を導入する手順
Rails APIモードで Gem "rails_admin"を使用して管理画面を作る際に、少し詰まったので解決までの手順を示す。
普通のRailsアプリケーションでのrails_adminの導入は以下の記事で書きました。
Rails APIモードと普通のRailsアプリケーションの違いでエラーが起きている
はじめは、普通のRailsアプリの手順で導入しようとしていました。すると以下のエラーが出ました。
$ rails g rails_admin:instal
(省略)
Expected to find a manifest file in `app/assets/config/manifest.js`
But did not, please create this file and use it to link any assets that need
to be rendered by your app:
Example:
//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
and restart your server
assets/config/manifest.jsが見つからない、と言われました。Rails APIモードでは生成されないファイルです。なので、assets/config/manifest.jsファイルを新規作成します。
もう一度コマンドを打つと
$ rails g rails_admin:instal
(省略)
Required middlewares for RailsAdmin are not added
To fix this, add
config.middleware.use ActionDispatch::Cookies
config.middleware.use ActionDispatch::Flash
config.middleware.use Rack::MethodOverride
config.middleware.use ActionDispatch::Session::CookieStore, {:key=>"_backend_session"}
to config/application.rb.
今度は違うエラー。ミドルウェアがないからエラーが出ています。APIモードでは、一部のミドルウェアが入っていないようです。ですので、自分でミドルウェアを設定する必要があります。エラーで表示されているコードをコピーして、config/application.rbに追記します。
config.api_only = true
config.middleware.use ActionDispatch::Cookies
config.middleware.use ActionDispatch::Flash
config.middleware.use Rack::MethodOverride
config.middleware.use ActionDispatch::Session::CookieStore, {:key=>"_backend_session"}
(Railsのミドルウェアに関して詳しい解説は以下。)
あとは、管理画面を表示するために、コントローラーの継承を変えていきます。
app/controllers/application_controller.rbをAPIではなくBaseを継承するように書き換えます。これでApplicationControllerが設定したミドルウェアを使えるようになります。
また、APIモードでデータ取得もしなければいけないので、api_controller.rbも新規作成しておきましょう。コントローラーの継承が複雑になるので注意してください。
以下の手順で、Rails APIモードで Gem "rails_admin"を使用して管理画面を作ることができると思います。
質問があればコメントをお願いいたします。
参考資料
Discussion