# Mbox 导入：验证失败时崩溃：名称过长

**URL:** <https://meta.discourse.org/t/mbox-import-crash-when-validation-failed-name-is-too-long/207912>\
**Category:** Support\
**Created:** [2021年十一月2日 00:25 UTC](https://meta.discourse.org/t/mbox-import-crash-when-validation-failed-name-is-too-long/207912 "2021-11-02T00:25:54Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![dachary](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/dachary/32/119731_2.png) [@dachary](https://meta.discourse.org/u/dachary)\
**Post date:** [2021年十一月2日 00:25 UTC](https://meta.discourse.org/t/mbox-import-crash-when-validation-failed-name-is-too-long/207912/1 "2021-11-02T00:25:54Z")

</div>

您好，

在导入垃圾邮件（并非故意 🤪）时，2.7.9 版本的 mbox 导入脚本会在遇到超过 255 个字符的名称时崩溃，而不是优雅地丢弃它。以下是堆栈跟踪信息。

此致

```plaintext
无效邮箱 '\"from:mrs.karlijn\"@home.sinet.sk' 用于 '_from_mrs.karlijn'。已使用 'ea189fafefc2ff24cd95ef7828f943dd@email.invalid'
     1485 / 2592 ( 57.3%) [1496 项/分钟] 记录错误：{:id=>\"leroysantosmaitre@yahoo.fr\", :email=>\"leroysantosmaitre@yahoo.fr\", :name=>\"EXCELLENT, Notre politique d'attribution de prime après sélection est dû à l'appel de nouvel investisseur au sein de notre Banque. C'est pour cette raison après une sélection des emails, le votre a été retenu. Et nous en sommes heureux de vous annoncer que vous êtes le gagnant de 60.000€. Et nous vous prions de bien vouloir contacter l'huissier Me SANTOS LEROY l'avocat qui a supervisé le jeu par son adresse mail pour recevoir le formulaire à remplir et pour procéder a l'encaissement de votre gain. Email :leroysantosmaitre@yahoo.fr\", :trust_level=>1, :staged=>true, :active=>false, :created_at=>Fri, 02 Oct 2009 12:51:46.000000000 UTC +00:00}
回溯（最近调用最后）：
        33: 来自 script/import_scripts/mbox.rb:9:in `\u003cmain\u003e'
        32: 来自 script/import_scripts/mbox.rb:10:in `\u003cmodule:ImportScripts\u003e'
        31: 来自 script/import_scripts/mbox.rb:12:in `\u003cmodule:Mbox\u003e'
        30: 来自 /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
        29: 来自 /var/www/discourse/script/import_scripts/mbox/importer.rb:35:in `execute'
        28: 来自 /var/www/discourse/script/import_scripts/mbox/importer.rb:63:in `import_users'
        27: 来自 /var/www/discourse/script/import_scripts/mbox/importer.rb:84:in `batches'
        26: 来自 /var/www/discourse/script/import_scripts/base.rb:873:in `batches'
        25: 来自 /var/www/discourse/script/import_scripts/base.rb:873:in `loop'
        24: 来自 /var/www/discourse/script/import_scripts/base.rb:874:in `block in batches'
        23: 来自 /var/www/discourse/script/import_scripts/mbox/importer.rb:69:in `block in import_users'
        22: 来自 /var/www/discourse/script/import_scripts/base.rb:264:in `create_users'
        21: 来自 /var/www/discourse/script/import_scripts/base.rb:264:in `each'
        20: 来自 /var/www/discourse/script/import_scripts/base.rb:276:in `block in create_users'
        19: 来自 /var/www/discourse/script/import_scripts/base.rb:344:in `create_user'
        18: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.3.2/lib/active_record/transactions.rb:209:in `transaction'
        17: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.3.2/lib/active_record/connection_adapters/abstract/database_statements.rb:320:in `transaction'
        16: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.3.2/lib/active_record/connection_adapters/abstract/transaction.rb:308:in `within_new_transaction'
        15: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.3.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
        14: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.3.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
        13: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.3.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
        12: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.3.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
        11: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.3.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
        10: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.3.2/lib/active_record/connection_adapters/abstract/transaction.rb:310:in `block in within_new_transaction'
         9: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.3.2/lib/active_record/connection_adapters/abstract/database_statements.rb:320:in `block in transaction'
         8: 来自 /var/www/discourse/script/import_scripts/base.rb:345:in `block in create_user'
         7: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.3.2/lib/active_record/suppressor.rb:48:in `save!'
         6: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.3.2/lib/active_record/transactions.rb:302:in `save!'
         5: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.3.2/lib/active_record/transactions.rb:350:in `with_transaction_returning_status'
         4: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.3.2/lib/active_record/connection_adapters/abstract/database_statements.rb:318:in `transaction'
         3: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.3.2/lib/active_record/transactions.rb:354:in `block in with_transaction_returning_status'
         2: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.3.2/lib/active_record/transactions.rb:302:in `block in save!'
         1: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.3.2/lib/active_record/validations.rb:53:in `save!'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.3.2/lib/active_record/validations.rb:80:in `raise_validation_error': 验证失败：名称过长（最长为 255 个字符）

```

也许这个补丁就是应该正确修复的地方？

```plaintext
diff --git a/script/import_scripts/base.rb b/script/import_scripts/base.rb
index 7cd7961cfc..652fcaf957 100644
--- a/script/import_scripts/base.rb
+++ b/script/import_scripts/base.rb
@@ -326,6 +326,7 @@ class ImportScripts::Base
     end
 
     opts[:name] = original_username if original_name.blank? && opts[:username] != original_username
+ opts[:name] = opts[:name][0..200] unless opts[:name].nil?
 
     opts[:trust_level] = TrustLevel[1] unless opts[:trust_level]
     opts[:active] = opts.fetch(:active, true)

```

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2021年十一月2日 07:54 UTC](https://meta.discourse.org/t/mbox-import-crash-when-validation-failed-name-is-too-long/207912/2 "2021-11-02T07:54:19Z")

</div>

这看起来不错。如果可行，请提交一个 PR。

---

<div class="post-metadata">

**Author:** ![dachary](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/dachary/32/119731_2.png) [@dachary](https://meta.discourse.org/u/dachary)\
**Post date:** [2021年十一月2日 07:56 UTC](https://meta.discourse.org/t/mbox-import-crash-when-validation-failed-name-is-too-long/207912/3 "2021-11-02T07:56:50Z")

</div>

我当然知道 🙂 但我不愿意同意 GitHub 的服务条款（[https://blog.dachary.org/2018/07/29/why-i-deleted-my-github-account/），该条款除其他有趣内容外，还明确基于地理位置将整个群体排除在外。](https://blog.dachary.org/2018/07/29/why-i-deleted-my-github-account/%EF%BC%89%EF%BC%8C%E8%AF%A5%E6%9D%A1%E6%AC%BE%E9%99%A4%E5%85%B6%E4%BB%96%E6%9C%89%E8%B6%A3%E5%86%85%E5%AE%B9%E5%A4%96%EF%BC%8C%E8%BF%98%E6%98%8E%E7%A1%AE%E5%9F%BA%E4%BA%8E%E5%9C%B0%E7%90%86%E4%BD%8D%E7%BD%AE%E5%B0%86%E6%95%B4%E4%B8%AA%E7%BE%A4%E4%BD%93%E6%8E%92%E9%99%A4%E5%9C%A8%E5%A4%96%E3%80%82)

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2021年十一月2日 10:06 UTC](https://meta.discourse.org/t/mbox-import-crash-when-validation-failed-name-is-too-long/207912/4 "2021-11-02T10:06:09Z")

</div>

如果您不想提交 PR，那就不必提交。

但您已经在使用 GitHub 了。
