# Db.rake falha para meu plugin de verificação de e-mail ao reconstruir o aplicativo

**URL:** <https://meta.discourse.org/t/db-rake-fails-for-my-email-check-plugin-on-rebuilding-app/162603>\
**Category:** Support\
**Created:** [31 Agosto , 2020 21:14 UTC](https://meta.discourse.org/t/db-rake-fails-for-my-email-check-plugin-on-rebuilding-app/162603 "2020-08-31T21:14:57Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)\
**Post date:** [31 Agosto , 2020 21:14 UTC](https://meta.discourse.org/t/db-rake-fails-for-my-email-check-plugin-on-rebuilding-app/162603/1 "2020-08-31T21:14:57Z")

</div>

Desenvolvi meu primeiro plugin que verifica, no momento do cadastro, se o e-mail é descartável por meio de uma API externa.

Até agora, funciona conforme o esperado…

> **[GitHub - disclosetv/plugin-check-email: Check for disposable email](https://github.com/disclosetv/plugin-check-email)**
>
> Check for disposable email

Mas agora, parece que ao reconstruir/atualizar o app, o db.rake apresenta algum problema:

```
rails aborted!
ActiveRecord::RecordInvalid: Validation failed: Email is not allowed from that email provider. Please use another email address.
(eval):39:in `block (2 levels) in run_file'
/src/lib/tasks/db.rake:222:in `block in <main>'
bin/rails:17:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

```

Provavelmente porque esta linha no db.rake tenta popular alguns dados, mas não consegue, já que meu plugin verifica e-mails inválidos e interfere:

SeedFu.seed(SeedHelper.paths, SeedHelper.filter)

Mas no mesmo arquivo, descobri que é possível excluir um plugin da execução dos arquivos de dados de seed:

```
  def self.filter
    # Permite que um plugin exclua quaisquer arquivos de dados de seed especificados
    DiscoursePluginRegistry.seedfu_filter.any? ?
      /^(?!.*(#{DiscoursePluginRegistry.seedfu_filter.to_a.join("|")})).*$/ : nil
  end
end

```

Mas como? Existem exemplos de plugins que fazem isso? Ou preciso fazer algo diferente para superar esse ponto? Muito obrigado por qualquer ajuda antecipadamente.

---

<div class="post-metadata">

**Author:** ![blake](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/blake/32/157322_2.png) [@blake](https://meta.discourse.org/u/blake)\
**Post date:** [31 Agosto , 2020 21:50 UTC](https://meta.discourse.org/t/db-rake-fails-for-my-email-check-plugin-on-rebuilding-app/162603/2 "2020-08-31T21:50:57Z")

</div>

A mensagem de erro que você recebe não lista o arquivo de dados de seed real que está causando o problema?

Uma vez que você saiba qual arquivo de dados de seed está causando o problema, pode filtrá-lo no seu plugin com:

```plaintext
after_initialize do
  register_seedfu_filter "00X_seed_filename"
  ...
end

```

---

<div class="post-metadata">

**Author:** ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)\
**Post date:** [31 Agosto , 2020 21:57 UTC](https://meta.discourse.org/t/db-rake-fails-for-my-email-check-plugin-on-rebuilding-app/162603/3 "2020-08-31T21:57:28Z")

</div>

Ótimo.

Em relação ao erro relatado, é isso que tenho.

```
== 20200819021210 AddUserSelectableColumnToColorSchemes: migrando ============
-- add_column(:color_schemes, :user_selectable, :bool, {:null=>false, :default=>false})
   -> 0.0062s
== 20200819021210 AddUserSelectableColumnToColorSchemes: migrado (0.0100s) ===

== 20200819203846 AddColorSchemeIdToUserOptions: migrando ====================
-- add_column(:user_options, :color_scheme_id, :integer)
   -> 0.0035s
== 20200819203846 AddColorSchemeIdToUserOptions: migrado (0.0051s) ===========

== 20200820174703 AddPartialTargetIdIndexToReviewables: migrando =============
-- add_index(:reviewables, [:target_id], {:where=>"target_type = 'Post'", :algorithm=>:concurrently, :name=>"index_reviewables_on_target_id_where_post_type_eq_post"})
   -> 0.0079s
== 20200820174703 AddPartialTargetIdIndexToReviewables: migrado (0.0091s) ====

rails abortido!
ActiveRecord::RecordInvalid: Validação falhou: O e-mail não é permitido por esse provedor de e-mail. Por favor, use outro endereço de e-mail.
(eval):39:in `block (2 levels) in run_file'
/src/lib/tasks/db.rake:222:in `block in <main>'
bin/rails:17:in `<main>'
Tasks: TOP => db:migrate
(Veja o rastreamento completo executando a tarefa com --trace)

```

Existe alguma possibilidade de descobrir/debugar qual arquivo está exatamente causando o problema para o meu pequeno novo plugin? Suspeito que seja algo relacionado à configuração de usuários com e-mails.

Aqui está mais informações de debug:

> **Resumo**
>
> terrapop@terrapop:/var/www/discourse$ d/rails --trace db:migrate RAILS\_ENV=development  
> \*\* Invoke db:migrate (first\_time)  
> \*\* Invoke db:load\_config (first\_time)  
> \*\* Invoke environment (first\_time)  
> \*\* Execute environment  
> \*\* Execute db:load\_config  
> \*\* Invoke environment  
> \*\* Invoke set\_locale (first\_time)  
> \*\* Execute set\_locale  
> \*\* Execute db:migrate  
> \*\* Invoke db:\_dump (first\_time)  
> \*\* Execute db:\_dump  
> \*\* Invoke db:structure:dump (first\_time)  
> \*\* Invoke db:load\_config  
> \*\* Execute db:structure:dump  
> rails abortido!  
> ActiveRecord::RecordInvalid: Validação falhou: O e-mail não é permitido por esse provedor de e-mail. Por favor, use outro endereço de e-mail.  
> /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active\_record/validations.rb:80:in `raise_validation_error' /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active_record/validations.rb:53:in `save!’  
> /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active\_record/transactions.rb:318:in `block in save!' /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active_record/transactions.rb:375:in `block in with\_transaction\_returning\_status’  
> /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active\_record/connection\_adapters/abstract/database\_statements.rb:278:in `transaction' /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active_record/transactions.rb:212:in `transaction’  
> /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active\_record/transactions.rb:366:in `with_transaction_returning_status' /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active_record/transactions.rb:318:in `save!’  
> /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active\_record/suppressor.rb:48:in `save!' /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active_record/persistence.rb:635:in `block in update!’  
> /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active\_record/transactions.rb:375:in `block in with_transaction_returning_status' /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active_record/connection_adapters/abstract/database_statements.rb:278:in `transaction’  
> /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active\_record/transactions.rb:212:in `transaction' /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active_record/transactions.rb:366:in `with\_transaction\_returning\_status’  
> /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active\_record/persistence.rb:633:in `update!' (eval):39:in `block (2 levels) in run\_file’  
> /usr/local/lib/ruby/gems/2.6.0/gems/seed-fu-2.3.9/lib/seed-fu/runner.rb:46:in `eval' /usr/local/lib/ruby/gems/2.6.0/gems/seed-fu-2.3.9/lib/seed-fu/runner.rb:46:in `block (2 levels) in run\_file’  
> /usr/local/lib/ruby/gems/2.6.0/gems/seed-fu-2.3.9/lib/seed-fu/runner.rb:58:in `block in open' /usr/local/lib/ruby/gems/2.6.0/gems/seed-fu-2.3.9/lib/seed-fu/runner.rb:57:in `open’  
> /usr/local/lib/ruby/gems/2.6.0/gems/seed-fu-2.3.9/lib/seed-fu/runner.rb:57:in `open' /usr/local/lib/ruby/gems/2.6.0/gems/seed-fu-2.3.9/lib/seed-fu/runner.rb:36:in `block in run\_file’  
> /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active\_record/connection\_adapters/abstract/database\_statements.rb:280:in `block in transaction' /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active_record/connection_adapters/abstract/transaction.rb:280:in `block in within\_new\_transaction’  
> /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.2/lib/active\_support/concurrency/load\_interlock\_aware\_monitor.rb:26:in `block (2 levels) in synchronize' /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle\_interrupt’  
> /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.2/lib/active\_support/concurrency/load\_interlock\_aware\_monitor.rb:25:in `block in synchronize' /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle\_interrupt’  
> /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.2/lib/active\_support/concurrency/load\_interlock\_aware\_monitor.rb:21:in `synchronize' /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active_record/connection_adapters/abstract/transaction.rb:278:in `within\_new\_transaction’  
> /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active\_record/connection\_adapters/abstract/database\_statements.rb:280:in `transaction' /usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active_record/transactions.rb:212:in `transaction’  
> /usr/local/lib/ruby/gems/2.6.0/gems/seed-fu-2.3.9/lib/seed-fu/runner.rb:35:in `run_file' /usr/local/lib/ruby/gems/2.6.0/gems/seed-fu-2.3.9/lib/seed-fu/runner.rb:26:in `block in run’  
> /usr/local/lib/ruby/gems/2.6.0/gems/seed-fu-2.3.9/lib/seed-fu/runner.rb:25:in `each' /usr/local/lib/ruby/gems/2.6.0/gems/seed-fu-2.3.9/lib/seed-fu/runner.rb:25:in `run’  
> /usr/local/lib/ruby/gems/2.6.0/gems/seed-fu-2.3.9/lib/seed-fu.rb:29:in `seed' /src/lib/tasks/db.rake:222:in `block in ’  
> /usr/local/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `block in execute' /usr/local/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `each’  
> /usr/local/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `execute' /usr/local/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:219:in `block in invoke\_with\_call\_chain’  
> /usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize' /usr/local/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:199:in `invoke\_with\_call\_chain’  
> /usr/local/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:188:in `invoke' /usr/local/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:160:in `invoke\_task’  
> /usr/local/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block (2 levels) in top_level' /usr/local/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `each’  
> /usr/local/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block in top_level' /usr/local/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:125:in `run\_with\_threads’  
> /usr/local/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:110:in `top_level' /usr/local/lib/ruby/gems/2.6.0/gems/railties-6.0.3.2/lib/rails/commands/rake/rake_command.rb:23:in `block in perform’  
> /usr/local/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:186:in `standard_exception_handling' /usr/local/lib/ruby/gems/2.6.0/gems/railties-6.0.3.2/lib/rails/commands/rake/rake_command.rb:20:in `perform’  
> /usr/local/lib/ruby/gems/2.6.0/gems/railties-6.0.3.2/lib/rails/command.rb:48:in `invoke' /usr/local/lib/ruby/gems/2.6.0/gems/railties-6.0.3.2/lib/rails/commands.rb:18:in `’  
> /usr/local/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load\_path\_cache/core\_ext/kernel\_require.rb:23:in `require' /usr/local/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require\_with\_bootsnap\_lfi’  
> /usr/local/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load\_path\_cache/loaded\_features\_index.rb:92:in `register' /usr/local/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require\_with\_bootsnap\_lfi’  
> /usr/local/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load\_path\_cache/core\_ext/kernel\_require.rb:31:in `require' /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.2/lib/active_support/dependencies.rb:324:in `block in require’  
> /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.2/lib/active\_support/dependencies.rb:291:in `load_dependency' /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.2/lib/active_support/dependencies.rb:324:in `require’  
> bin/rails:17:in `’  
> Tasks: TOP =\> db:migrate

---

<div class="post-metadata">

**Author:** ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)\
**Post date:** [1 Setembro , 2020 07:28 UTC](https://meta.discourse.org/t/db-rake-fails-for-my-email-check-plugin-on-rebuilding-app/162603/4 "2020-09-01T07:28:02Z")

</div>

Atualização:

Encontrei e corrigi o problema:

```
def seed_primary_email
  UserEmail.seed do |ue|
    ue.id = DiscourseNarrativeBot::BOT_USER_ID
    ue.email = "discobot_email"
    ue.primary = true
    ue.user_id = DiscourseNarrativeBot::BOT_USER_ID
  end
end

```

no arquivo discourse/plugins/discourse-narrative-bot/db/fixtures/001\_discobot.rb causou o problema.

Adicionar ` register_seedfu_filter "001_discobot"` resolveu o problema.

Obrigado @blake por me indicar o caminho certo. Agora funciona.

Última pergunta: Para o futuro… como registrar múltiplos filtros? Assim?

`register_seedfu_filter "001_discobot|002_xxxxxx|003_yyyy"`

---

<div class="post-metadata">

**Author:** ![blake](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/blake/32/157322_2.png) [@blake](https://meta.discourse.org/u/blake)\
**Post date:** [1 Setembro , 2020 15:22 UTC](https://meta.discourse.org/t/db-rake-fails-for-my-email-check-plugin-on-rebuilding-app/162603/5 "2020-09-01T15:22:33Z")

</div>

Pode haver uma maneira de fazer isso em uma única linha, mas para registrar vários filtros, você pode usar várias linhas

```plaintext
register_seedfu_filter "001..."
register_seedfu_filter "002..."

```

---

<div class="post-metadata">

**Author:** ![blake](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/blake/32/157322_2.png) [@blake](https://meta.discourse.org/u/blake)\
**Post date:** [1 Setembro , 2020 15:51 UTC](https://meta.discourse.org/t/db-rake-fails-for-my-email-check-plugin-on-rebuilding-app/162603/6 "2020-09-01T15:51:43Z")

</div>

No entanto, essa API seedfu\_filter deve ser usada com extrema cautela!

Acho realmente que você não deveria adicioná-la ao seu plugin, pois você poderia quebrar o discobot para outros usuários do seu plugin caso eles ainda não tenham executado esse arquivo de seed.

Talvez o que você possa fazer é excluir usuários com IDs \< 0, para que seu plugin não verifique os e-mails do sistema e do discobot. Você pode usar o método `.human_users` para conseguir isso.

---

<div class="post-metadata">

**Author:** ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)\
**Post date:** [1 Setembro , 2020 19:06 UTC](https://meta.discourse.org/t/db-rake-fails-for-my-email-check-plugin-on-rebuilding-app/162603/7 "2020-09-01T19:06:13Z")

</div>

Interessante, com certeza vou analisar isso e fazer a alteração conforme você sugeriu.

---

<div class="post-metadata">

**Author:** ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)\
**Post date:** [2 Setembro , 2020 11:13 UTC](https://meta.discourse.org/t/db-rake-fails-for-my-email-check-plugin-on-rebuilding-app/162603/8 "2020-09-02T11:13:24Z")

</div>

@blake

Adicionei agora as seguintes linhas:

```
return unless value.present?
return unless defined? record.id
return unless record.password_validation_required?

```

além de:

`return unless record.should_validate_email_address?`

Como o disco\_bot já foi criado com um ID no db.migrate, isso agora funciona.

Além disso, tive que adicionar o validador password\_validation\_required, caso contrário o plugin também era acionado quando o usuário estava logado e alterava o avatar.

Agora, ele está realmente vinculado apenas ao formulário de sign\_up, e nenhum filtro do seedfu é mais necessário.

---

<div class="post-metadata">

**Author:** ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)\
**Post date:** [2 Outubro , 2020 11:14 UTC](https://meta.discourse.org/t/db-rake-fails-for-my-email-check-plugin-on-rebuilding-app/162603/9 "2020-10-02T11:14:56Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
