質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

2701閲覧

本番環境(Heroku)でAdminアクセスができなくなってしまった(rails)

yamady

総合スコア176

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2017/07/06 05:30

編集2017/07/06 07:49

閲覧いただき、まことにありがとうございます。

開発環境では問題なく、rails adminに入れるのですが
本番環境(Heroku)では入れずに困っています。。

##エラー

2017-07-06T05:28:09.493509+00:00 app[web.1]: I, [2017-07-06T05:28:09.493401 #4] INFO -- : [5adaee92-b977-4527-a07f-5d3530095dd5] Started GET "/admin" for 58.12.53.66 at 2017-07-06 05:28:09 +0000 2017-07-06T05:28:09.495281+00:00 app[web.1]: I, [2017-07-06T05:28:09.495192 #4] INFO -- : [5adaee92-b977-4527-a07f-5d3530095dd5] Processing by RailsAdmin::MainController#dashboard as HTML 2017-07-06T05:28:09.500953+00:00 app[web.1]: D, [2017-07-06T05:28:09.500885 #4] DEBUG -- : [5adaee92-b977-4527-a07f-5d3530095dd5] User Load (4.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 1], ["LIMIT", 1]] 2017-07-06T05:28:09.515841+00:00 app[web.1]: I, [2017-07-06T05:28:09.515719 #4] INFO -- : [5adaee92-b977-4527-a07f-5d3530095dd5] Completed 500 Internal Server Error in 20ms (ActiveRecord: 4.1ms) 2017-07-06T05:28:09.516939+00:00 app[web.1]: F, [2017-07-06T05:28:09.516865 #4] FATAL -- : [5adaee92-b977-4527-a07f-5d3530095dd5] 2017-07-06T05:28:09.517411+00:00 app[web.1]: F, [2017-07-06T05:28:09.517339 #4] FATAL -- : [5adaee92-b977-4527-a07f-5d3530095dd5] NoMethodError (undefined method `admin?' for #<User:0x00000006e2b7f0>): 2017-07-06T05:28:09.517480+00:00 app[web.1]: F, [2017-07-06T05:28:09.517417 #4] FATAL -- : [5adaee92-b977-4527-a07f-5d3530095dd5] 2017-07-06T05:28:09.517574+00:00 app[web.1]: F, [2017-07-06T05:28:09.517485 #4] FATAL -- : [5adaee92-b977-4527-a07f-5d3530095dd5] app/models/ability.rb:5:in `initialize'

##試してみたこと

ユーザーにアクセス権限がないのがまず一番の問題だと考え、

$ heroku run rails c $ 001:0> user = User.find(1) $ 002:0> user.update_attribute(:admin, "true")

と入力してみたところ、下記のエラーがかえってきました。

NoMethodError: undefined method `admin='

##該当するソースコード

ability.rb

ruby

1class Ability 2 include CanCan::Ability 3 4 def initialize(user) 5 if user && user.admin? 6 can :access, :rails_admin # grant access to rails_admin 7 can :manage, :all # allow superadmins to do anything 8 end 9 end 10end

user.rb

ruby

1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :trackable, :validatable, 6 :omniauthable 7 has_many :reviews, dependent: :destroy 8 has_many :user_images 9 mount_uploader :image, ThumbnailUploader 10 accepts_nested_attributes_for :user_images 11 12 class << self 13 def find_for_facebook_oauth(auth) 14 where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 15 user.email = auth.info.email 16 user.password = Devise.friendly_token[0,20] 17 user.name = auth.info.name 18 end 19 end 20 21 def create_unique_string 22 SecureRandom.uuid 23 end 24 25 def create_unique_email 26 User.create_unique_string + "@example.com" 27 end 28 end 29 30 private 31 32 def user_params 33 params.require(:user).permit(:name, :email, :image, user_images_attributes: [:cover_image]) 34 end 35end

すみませんが、どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mattn

2017/07/06 05:32

git に含まれてないファイルがあるんじゃないでしょうか?commit 漏れなど。
yamady

2017/07/06 06:33

コメントありがとうございます。おそらく、commit 漏れなどはないかと思うのですが・・・汗
guest

回答1

0

ベストアンサー

開発と本番でデータが違っていて、admin でないユーザで admin = を実行してないでしょうか?

user.admin?

が期待しない結果を返してないでしょうか。

投稿2017/07/06 06:37

mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamady

2017/07/06 06:56

回答いただきまして、ありがとうございます。よくないことだとは思うのですが、railsチュートリアルを踏襲しており、開発環境でSQlite、本番今日でPostgresqlを使っています。heroku上でadminを作ろうとすると、下記のエラーが生じてしまいます。 $ user.update_attribute(:admin_flg, true) NoMethodError: undefined method `admin_flg='
mattn

2017/07/06 06:59

テーブルに admin_flg が無いからではないでしょうか。おそらくチュートリアルの一部が抜けてしまっているのかと。もしテーブルに無いのであれば rails g migration AddAdminFlgToUser admin_flg:boolean rake db:migrate を実行すると出来るかと思います。
yamady

2017/07/06 07:30

ご親切にありがとうございます。 いただだいたようにやってみました。 ローカル環境ではできているのですが、なぜかherokuでできておらず。。 StandardError: An error has occurred, this and all later migrations canceled: PG::UndefinedTable: ERROR: table "active_admin_comments" does not exist : DROP TABLE "active_admin_comments" 上記のようなエラーがみつかりました。おそらく、このactive_admin_commentsが邪魔をして、それ以降のmigrationができていないみたいです。。 >> user = User.find(1) User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] => #<User id: 1, email: "test@example.com", created_at: "2017-06-20 04:33:02", updated_at: "2017-07-06 06:35:23", provider: "facebook", uid: "xxx", name: "Taro Yamada", description: "", admin: "true", image: "icon.jpg", admin_flg: nil> >> user.update_attribute(:admin_flg, true) (0.7ms) begin transaction SQL (0.6ms) UPDATE "users" SET "updated_at" = ?, "admin_flg" = ? WHERE "users"."id" = ? [["updated_at", 2017-07-06 07:23:23 UTC], ["admin_flg", true], ["id", 1]] (1.2ms) commit transaction => true >> exit $ heroku run rails c Running rails c on ⬢ calm-springs-83395... up, run.6056 (Free) Loading production environment (Rails 5.0.0.1) irb(main):001:0> user = User.find(1) D, [2017-07-06T07:23:56.696961 #4] DEBUG -- : User Load (1.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] => #<User id: 1, email: "test@example.com", created_at: "2017-07-06 07:22:31", updated_at: "2017-07-06 07:22:31", provider: "facebook", uid: "xxx", name: "Taro Yamada", background: nil, description: nil> irb(main):002:0> user.update_attribute(:admin_flg, true) NoMethodError: undefined method `admin_flg=' for #<User:0x000000068d03f0> from /app/vendor/bundle/ruby/2.3.0/gems/activemodel-5.0.0.1/lib/active_model/attribute_methods.rb:433:in `method_missing' from /app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/persistence.rb:254:in `public_send' from /app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/persistence.rb:254:in `update_attribute' from (irb):2
mattn

2017/07/06 07:32

もしかして Gemfile を更新されておられないという事は無いでしょうか?見た感じ heroku 側が admin を見れてない様ですが。
yamady

2017/07/06 07:45

ありがとうございます。「active_admin_comments」を取り除けて、userにadmin_flgをつけることはできたのですが、下記のようなエラーが生じています。。 Gemfile更新したものをgit push herokuしてるとは思うのですが・・・>< 2017-07-06T07:44:30.515595+00:00 app[web.1]: I, [2017-07-06T07:44:30.515534 #4] INFO -- : [73c4d5a3-4f24-42b6-b6e0-974437236d2a] Completed 500 Internal Server Error in 4ms (ActiveRecord: 1.6ms) 2017-07-06T07:44:30.516633+00:00 app[web.1]: F, [2017-07-06T07:44:30.516573 #4] FATAL -- : [73c4d5a3-4f24-42b6-b6e0-974437236d2a] 2017-07-06T07:44:30.516690+00:00 app[web.1]: F, [2017-07-06T07:44:30.516633 #4] FATAL -- : [73c4d5a3-4f24-42b6-b6e0-974437236d2a] CanCan::AccessDenied (You are not authorized to access this page.): アクセス付与しているユーザーで入っているはずなのですが・・・・
mattn

2017/07/06 07:58

admin_flg が立っていないんじゃないでしょうか。
yamady

2017/07/06 08:04

まさにその通りでした。。ability内の記述がadmin→admin_flgで見事解決いたしました。 即時の回答ほんとうに助かりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問