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

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

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

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

Devise

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

MySQL

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

Q&A

解決済

1回答

596閲覧

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

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などの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿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

1Started POST "/users/guest_sign_in" for xxx.xx.xxx.4 at 2021-11-29 11:24:08 +0900 2Cannot render console from xxx.xx.xxx.x! Allowed networks: 172.31.xx.xx, xxx.0.0.0/xxx.xxx.xxx.xxx, ::1 3Processing by Users::SessionsController#guest_sign_in as HTML 4 Parameters: {"authenticity_token"=>"0e0U2TAGXsEcfgZULorXqwGZMyYr+qkWesg/AvoWBS8Y+f/Vjv1E4NBedbg9//ZoRP/WXfhTCphvm30iG8cMsw=="} 5 User Load (1.3ms) SELECT `users`.* FROM `users` WHERE `users`.`email` = 'guest@example.com' LIMIT 1 6 ↳ app/models/user.rb:48 7 (0.2ms) BEGIN 8 ↳ app/models/user.rb:48 9 User Exists (0.3ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = BINARY 'guest@example.com' LIMIT 1 10 ↳ app/models/user.rb:48 11 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') 12 ↳ app/models/user.rb:48 13 (0.1ms) ROLLBACK 14 ↳ app/models/user.rb:48 15Completed 500 Internal Server Error in 375ms (ActiveRecord: 2.7ms) 16 17 18 19ActiveRecord::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

1class Users::SessionsController < Devise::SessionsController 2 # before_action :configure_sign_in_params, only: [:create] 3 4 # GET /resource/sign_in 5 def new 6 @user = User.new 7 end 8 9 def guest_sign_in 10 user = User.guest 11 sign_in user # ユーザーをログインさせる 12 redirect_to root_path, notice: 'ゲストユーザーとしてログインしました。' 13 end 14end

UserModel

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

RoutesRb

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

調べたこと

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

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

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

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

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

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

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

guest

回答1

0

自己解決

ALTER TABLE {テーブル名} CONVERT TO CHARACTER SET utf8;で解決できました。

投稿2021/11/30 02:43

tomomomo

総合スコア22

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問