0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Sorceryのサブモジュール追加する際にdb:migrateできない問題

Last updated at Posted at 2020-11-03

Sorceryで認証機能を作る際、各機能を追加するには都度サブモジュールをインストールしていくのですが、公式のチュートリアル通り進めようとして出だしでつまづいたので解決方法を記します。

##問題に当たるまで
User Activation機能を追加する場面を例に使います。
*ここではgemのインストールやUserモデルの作成、基本的な認証機能は実装済みであることを前提に進めます。

まずはサブモジュールのインストール

$ rails g sorcery:install user_activation  --only-submodules

すると以下のマイグレーションファイルが作られます。

[timestamp]_sorcery_user_activation.rb
class SorceryUserActivation < ActiveRecord::Migration
  def change
    add_column :users, :activation_state, :string, :default => nil
    add_column :users, :activation_token, :string, :default => nil
    add_column :users, :activation_token_expires_at, :datetime, :default => nil

    add_index :users, :activation_token
  end

end

そしてマイグレート

$ rails db:migrate

ここでエラー発生!

rails aborted!
ArgumentError: To use user_activation submodule, you must define a mailer (config.user_activation_mailer = YourMailerClass).

エラーメッセージは「このサブモジュールを使うならメーラーを書いとけ!」 と言っていますが、従ったところで別のエラーが発生し先には進めません。

##原因

この問題は、最初にサブモジュール追加のコマンドを打った際、あとで自分で追記するべき箇所に自動的に追記されることで発生します。

config/initializers/sorcery.rb
Rails.application.config.sorcery.submodules = [:user_activation, :他のサブモジュール ...]

チュートリアルの通りに進めると、あとで上の:user_activationを追記せよとの指示がありますが、今これが記載されていると先に進めなくなるので一旦削除します。

config/initializers/sorcery.rb
Rails.application.config.sorcery.submodules = [(:他のサブモジュール )...]

やっとマイグレートできるようになりました。

$ rails db:migrate

あとはチュートリアル通り進めると:user_activationを追記する指示があるのでそこで追記し解決です。

##参考
Sorcery/wiki/User-Activation

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?