You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fly ssh console -a gamarjoba
``
上記コマンドを実行すると、Fly.ioのデプロイ環境のコンソールに接続できます。
次に、Railsコンソールを起動します。
``sh
rails c
``
管理者にしたいユーザーの role を更新
Railsコンソール上で、管理者にしたいユーザーを探して role を admin に変更します。
````ruby
# 管理者にしたいユーザーのメールアドレスを指定
user = User.find_by(email: "admin@example.com")
# 現在の role を確認
user.role
# role を admin に変更
user.admin!# 変更後の role を確認
user.role # => "admin"
この操作により、対象のユーザーが管理者になります
しかし、コンソール上、rails: command not found というエラーが出ているため、Fly.ioのコンテナ内に rails コマンドが正しくインストールされていないか、環境変数の設定が適切でない可能性があるのかなと思いました
itok1000@ItoKen:~/graduation$ fly ssh console -a gamarjoba
Connecting to fdaa:b:4994:a7b:17d:ddbd:9028:2... complete
root@784e667b47e238:/rails# user = User.find_by(email: "jiantaiyiteng1@gmail.com")
-bash: syntax error near unexpected token `('
root@784e667b47e238:/rails# rails console
-bash: rails: command not found
itok1000@ItoKen:~/graduation$ fly pg attach:
Manage Postgres clusters.
Usage:
flyctl postgres [command]
Aliases:
postgres, pg
Available Commands:
attach Attach a postgres cluster to an app
backup Backup commands
config Show and manage Postgres configuration.
connect Connect to the Postgres console
create Create a new Postgres cluster
db Manage databases in a cluster
detach Detach a postgres cluster from an app
events Track major cluster events
failover Failover to a new primary
import Imports database from a specified Postgres URI
list List postgres clusters
renew-certs Renews the SSH certificates for the Postgres cluster.
restart Restarts each member of the Postgres cluster one by one.
users Manage users in a postgres cluster
Flags:
-h, --help help for postgres
Global Flags:
-t, --access-token string Fly API Access Token
--debug Print additional logs and traces
--verbose Verbose output
Use "flyctl postgres [command] --help" for more information about a command.
Users テーブルに role カラムを追加
Users テーブルに role カラムを追加するマイグレーションファイルを作成するためにターミナルにて Users テーブルに role カラムを追加するマイグレーションファイルを生成するコマンドを実行する
stylesheet のマニフェストファイルを削除したことにより、アセットパイプラインが内のエラーが起きたため、
app/views/layouts/admin_login.html.erbとapp/views/admin/layouts/application.html.erbは
既存アプリのマニフェストファイルを再利用する方向に修正
Before
実現したいこと
管理画面へのログイン機能、管理画面トップページを本番環境でも実装できるようにしたい
下記のように対応
管理画面におけるマイグレとモデルの準備
#295
管理画面におけるルート側とコントローラーの実装
#300
管理画面のビュー(view)作成
#305
指定の JavaScript パッケージをインストールを取りやめて、既存のCSSを再利用
#308
管理画面へのログイン機能、管理画面トップページの作成は完了しました
本番fly.ioのデプロイ環境で管理者権限を付与する方法についてが難しく感じています
現在できていること
admin画面のログインフォームが本番環境にてできているのを確認しましたが、Rails コンソールを立ち上げ、現在ログインしているユーザーの role を admin に変更するのを本番環境でどのように実装するかで躓いています
https://gamarjoba.jp/admin/login?locale=ja
試したこと
Fly.ioの本番環境でRailsコンソールを起動
Fly.ioのデプロイ環境で管理者権限を付与するには、本番環境のRailsコンソールを開いて、role を admin に更新する必要があります。
本番環境でRailsコンソールを開く
この操作により、対象のユーザーが管理者になります
しかし、コンソール上、rails: command not found というエラーが出ているため、Fly.ioのコンテナ内に rails コマンドが正しくインストールされていないか、環境変数の設定が適切でない可能性があるのかなと思いました
公式記事から、Fly Postgres の管理を見ました
認識に錯誤があるかもしれませんが、おそらく下記の記事が本番fly.ioのデプロイ環境で管理者権限を付与する認識なのかなと考えました
https://fly.io/docs/postgres/managing/users-and-roles/
しかし、公式記事にはadmin権限を付与する方法についての記載がない(もしくはざっくり書いているだけ)なので、
この点が難しく思います
Users テーブルに role カラムを追加
Users テーブルに role カラムを追加するマイグレーションファイルを作成するためにターミナルにて Users テーブルに role カラムを追加するマイグレーションファイルを生成するコマンドを実行する
生成されたマイグレーションファイルは以下のように編集
上記が反映されることで Users テーブルに role カラムが追加されることに加えて、 role カラムにはデフォルトで 0 が登録される
User モデルに enum を定義
app/models/user.rb を以下のように編集
上記の記述で role カラム(integer)の値に応じて、そのユーザーが general(一般)か admin(管理者)が判別できるようになる
先程のマイグレーションファイルの default: 0 によって role カラムが 0 のユーザーは general となる
role を admin に変更する
以下のコマンドをターミナルにて実行して、Rails コンソールを立ち上げ、現在ログインしているユーザーの role を admin に変更する
管理画面(admin)を切り出す
管理画面関連の URL・コントローラー・ビュー・アセット・etc を、以下のようにして一般ユーザー触れる部分と切り分ける
今回はまずコントローラーとURLの対応を行う
管理画面は /admin をルートとするように設定する(URL:namespaceを使ってadminを切り出し、管理画面関連はそちらに配置する。)
config/routes.rb を以下のように編集
app/controllers/配下にadminディレクトリを作成し、管理画面関連はそちらのディレクトリ配下に配置する
1. app/controllers/admin/base_controller.rb を生成・編集
以下のコマンドをターミナルにて実行する
生成された app/controllers/admin/base_controller.rb を以下のように編集する
上記の記述をした app/controllers/admin/base_controller.rb を作成し、app/controllers/admin/配下に作成するコントローラーは app/controllers/admin/base_controller.rb を継承させることで before_action :check_admin, layout 'admin/layouts/application', not_authenticated メソッドも継承する
check_admin メソッドは、ログインしているユーザーの role カラムが admin で無かった場合に指定のパスにリダイレクトさせる
not_authenticated メソッドは ApplicationController で定義されている not_authenticated を上書きしている
layout 'admin/layouts/application'の記述で、app/views/admin/layouts/配下にある application.html.erb をレイアウトとして使用する
2. app/controllers/admin/user_sessions_controller.rb を生成・編集
以下のコマンドをターミナルにて実行する
生成された app/controllers/admin/user_sessions_controller.rb を以下のように編集する
Admin::UserSessionsController は、Admin::BaseController を継承しているため、ApplicationController の require_login メソッドも継承している(Admin::BaseController は ApplicationController を継承しているため)
layout 'layouts/admin_login' の記述によって、Admin::UserSessionsController のアクションは、app/views/layouts/配下にある admin_login.html.erb が使用される
3. app/controllers/admin/dashboards_controller.rbを生成・編集
以下のコマンドをターミナルにて実行する
生成された aapp/controllers/admin/dashboards_controller.rb を以下のように編集する
Admin::DashboardsController は、Admin::BaseController を継承しているため、ApplicationController の require_login メソッドも継承している(Admin::DashboardsController は ApplicationController を継承しているため)
layout 'layouts/admin_login' の記述によって、Admin::UserSessionsController のアクションは、app/views/admin/dashboards/配下にある index.html.erb が使用される
管理画面へログインした後のダッシュボードページ画面の作成する
app/views/admin/dashboards/index.html.erb
全管理ページで共通のレイアウトを定義する
app/views/admin/layouts/application.html.erb
管理ページのフッターを定義する
app/views/admin/shared/_footer.html.erb
管理ページのヘッダーを定義する
app/views/admin/shared/_header.html.erb
管理ページのサイドバーを定義する
app/views/admin/shared/_sidebar.html.erb
ログインページのview画面を作成する
app/views/admin/user_sessions/new.html.erb
管理画面のログインページのレイアウトページを作成する
app/views/layouts/admin_login.html.erb
page_title メソッド修正する
現状ローカルホストで開くと、下記のArgumentエラーが発生する
page_titleメソッドに渡される引数の数が期待される数と合っていないから発生してるので、コードを見直して、page_titleメソッドを呼び出している部分を確認する必要がある
キーワード引数を追加し、admin の値が ture or false によって base_title が動的に変化するように修正
ロゴマークを持ってくる
app/assets/images/AdminLTELogo.pngをコピーして張りつける
application.jsにadminLTE情報を追加
下記の資料のscriptとhrefをapp/views/admin/layouts/application.html.erbに格納する
Railsのapplication.html.erbファイルは、全てのページで共有される共通のレイアウトを定義するためのファイル
今回の管理画面のJavascriptも全ての管理者ページで共有できるようにするため、公式のscriptとhrefを格納
https://adminlte.io/docs/3.2/
app/views/admin/layouts/application.html.erb
管理画面関連で使用する JavaScript のマニフェストファイルを生成・編集する
管理画面関連で使用する JavaScript のマニフェストファイル(app/javascript/admin.js)を生成して、以下のように編集
@hotwired/turbo-rails, bootstrap/dist/js/bootstrap を使用する部分は、app/javascript/application.js と同じだが、admin_teq/assets/dist/js/dashboard の一文を追加
これにより app/javascript/admin.js を読み込むと、node_modules/admin-lte/dist/js/配下にある adminlted.js も読み込まれる
管理画面関連で使用する stylesheet のマニフェストファイルを生成・編集する
管理画面関連で使用する styleshhet のマニフェストファイル(app/assets/stylesheets/admin/application.scss, app/assets/stylesheets/admin/login.scss)を生成する
app/assets/stylesheets/admin/application.scss は以下のように編集
app/assets/stylesheets/admin/login.scss は以下のように編集
dartsass の設定
config/initializers/dartsass.rb を生成して以下のように編集
対応を変更
stylesheet のマニフェストファイルとdartsass の設定を削除
管理画面関連で使用する styleshhet のマニフェストファイル(app/assets/stylesheets/admin/application.scss, app/assets/stylesheets/admin/login.scss)を削除
また、フッターも不要なので、フッターも削除
app/views/admin/shared/_footer.html.erb
javascript/admin.js
admin/login.scss
stylesheets/admin/login.scss
admin/application.scss
config/initializers/dartsass.rb
application.jsにadminLTE情報を追加を取りやめ
下記の資料のscriptとhrefをapp/views/admin/layouts/application.html.erbに格納するのを取りやめ
https://adminlte.io/docs/3.2/
app/views/admin/layouts/application.html.erb
アセットパイプラインの紐づけを変更
stylesheet のマニフェストファイルを削除したことにより、アセットパイプラインが内のエラーが起きたため、
app/views/layouts/admin_login.html.erbとapp/views/admin/layouts/application.html.erbは
既存アプリのマニフェストファイルを再利用する方向に修正
Before
After
管理画面のログインview画面のフォーマットを作成する
app/views/admin/user_sessions/new.html.erbを編集し、
既存アプリのcssフォーマットを再利用して、view画面を整える
i18nの翻訳エラーの修正
改行漏れによる翻訳不可エラーを解消するため、
config/locales/view/ja.ymlの「admin:」の改行を追加し、タイトルを「管理者画面ログイン」に修正変更
動作の確認を行う
参考にしたURL・使用したプロンプト
https://qiita.com/shouta-dev/items/2d46c68ebbe163dc0c6c
https://github.com/ColorlibHQ/AdminLTE
The text was updated successfully, but these errors were encountered: