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

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

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

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

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

解決済

【Guestログインがうまくいかない】devise、MySQL使用

tomomomo
tomomomo

総合スコア22

Ruby on Rails 5

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

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

1回答

0評価

0クリップ

402閲覧

投稿2021/11/29 02:55

現状と問題

railsでツイッタークローンアプリを作成しています。
c9で開発をしているのですが、デプロイをする際にEC2インスタンスでDBをMySQLにしました。(ローカルの開発環境はsqlite3でした)
それに応じてローカルのDBもMySQLに移行しました。
以前ゲストログインをこちらを参考に実装していたのですが、エラーが出ました。(MySQL移行前は問題なく動作していました。)

エラー文

ActiveRecord::StatementInvalid in Users::SessionsController#guest_sign_in Mysql2::Error: Incorrect string value: '\xE3\x82\x88\xE3\x82\x8D...' for column 'introduction' at row 1: INSERT INTO `users` (`email`, `encrypted_password`, `name`, `introduction`, `created_at`, `updated_at`) VALUES ('guest@example.com', '$2a$12$9U96MxaRd3VbPCMlIMcnX.WVtsf5sJgM4WRvYLSq5yoZHefkZg/NS', 'guestuser', 'よろしくお願いいたします。', '2021-11-29 02:24:08', '2021-11-29 02:24:08') Extracted source (around line #48): def self.guest find_or_create_by!(email: 'guest@example.com') do |user|     ※エラー該当箇所 user.password = SecureRandom.urlsafe_base64 user.password_confirmation = user.password user.name = 'guestuser' Rails.root: /home/ec2-user/environment/PF_tuitta- Application Trace | Framework Trace | Full Trace app/models/user.rb:48:in `guest' app/controllers/users/sessions_controller.rb:12:in `guest_sign_in' Request Parameters: {"_method"=>"post", "authenticity_token"=>"0e0U2TAGXsEcfgZULorXqwGZMyYr+qkWesg/AvoWBS8Y+f/Vjv1E4NBedbg9//ZoRP/WXfhTCphvm30iG8cMsw=="} Toggle session dump Toggle env dump Response Headers: None

terminal

Started POST "/users/guest_sign_in" for xxx.xx.xxx.4 at 2021-11-29 11:24:08 +0900 Cannot render console from xxx.xx.xxx.x! Allowed networks: 172.31.xx.xx, xxx.0.0.0/xxx.xxx.xxx.xxx, ::1 Processing by Users::SessionsController#guest_sign_in as HTML Parameters: {"authenticity_token"=>"0e0U2TAGXsEcfgZULorXqwGZMyYr+qkWesg/AvoWBS8Y+f/Vjv1E4NBedbg9//ZoRP/WXfhTCphvm30iG8cMsw=="} User Load (1.3ms) SELECT `users`.* FROM `users` WHERE `users`.`email` = 'guest@example.com' LIMIT 1 ↳ app/models/user.rb:48 (0.2ms) BEGIN ↳ app/models/user.rb:48 User Exists (0.3ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = BINARY 'guest@example.com' LIMIT 1 ↳ app/models/user.rb:48 User Create (0.7ms) INSERT INTO `users` (`email`, `encrypted_password`, `name`, `introduction`, `created_at`, `updated_at`) VALUES ('guest@example.com', '$2a$12$9U96MxaRd3VbPCMlIMcnX.WVtsf5sJgM4WRvYLSq5yoZHefkZg/NS', 'guestuser', 'よろしくお願いいたします。', '2021-11-29 02:24:08', '2021-11-29 02:24:08') ↳ app/models/user.rb:48 (0.1ms) ROLLBACK ↳ app/models/user.rb:48 Completed 500 Internal Server Error in 375ms (ActiveRecord: 2.7ms) ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value: '\xE3\x82\x88\xE3\x82\x8D...' for column 'introduction' at row 1: INSERT INTO `users` (`email`, `encrypted_password`, `name`, `introduction`, `created_at`, `updated_at`) VALUES ('guest@example.com', '$2a$12$9U96MxaRd3VbPCMlIMcnX.WVtsf5sJgM4WRvYLSq5yoZHefkZg/NS', 'guestuser', 'よろしくお願いいたします。', '2021-11-29 02:24:08', '2021-11-29 02:24:

該当コード (対象の部分のみ記載しています)

SessionController

class Users::SessionsController < Devise::SessionsController # before_action :configure_sign_in_params, only: [:create] # GET /resource/sign_in def new @user = User.new end def guest_sign_in user = User.guest sign_in user # ユーザーをログインさせる redirect_to root_path, notice: 'ゲストユーザーとしてログインしました。' end end

UserModel

class User < ApplicationRecord def self.guest find_or_create_by!(email: 'guest@example.com') do |user| //エラー文で指摘されている箇所 user.password = SecureRandom.urlsafe_base64 user.password_confirmation = user.password user.name = 'guestuser' user.introduction = 'よろしくお願いいたします。' end end end

RoutesRb

devise_scope :user do # TIPS: ユーザー登録失敗のリダイレクトのエラーを防ぐ https://github.com/heartcombo/devise/blob/master/app/controllers/devise/registrations_controller.rb get '/users', to: 'devise/registrations#new' post 'users/guest_sign_in', to: 'users/sessions#guest_sign_in' //ゲストログインルーティング end

調べたこと

Mysql2::Error: Incorrect string value:をヒントにこちらの記事を見つけました。
character_set_databaseがlatin1になっていることが原因で、utf8に戻すという方法みたいです。
文字列が原因ならば、他の新規作成もできないと思うのですが、ゲストではなく新規登録を行ってみたところ問題なく作成されました。
ちなみに本番環境の方ではlatin1→utf8にしています。(database.ymlにも記載しています)
見当違いでしたら申し訳ありません。

まずはローカルで検証したいため、どなたかご教示いただければ幸いです。
よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails 5

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

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。