CSV を通じた特殊文字付きタグのアップロードが失敗しています

こんにちは。CSV ファイルに多数のタグを記載してアップロードしようとしているのですが、毎回「申し訳ありませんが、ファイルのアップロード中にエラーが発生しました。もう一度お試しください」というエラーメッセージが表示されます。

管理パネルのログには以下のように表示されています。

Message (8 copies reported)

Failed to process hijacked response correctly : Validation failed: Name is invalid

Backtrace

/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/validations.rb:80:in `raise_validation_error'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/validations.rb:53:in `save!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/transactions.rb:318:in `block in save!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/transactions.rb:375:in `block in with_transaction_returning_status'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/database_statements.rb:278:in `transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/transactions.rb:212:in `transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/transactions.rb:366:in `with_transaction_returning_status'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/transactions.rb:318:in `save!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/suppressor.rb:48:in `save!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/persistence.rb:55:in `create!'

試しに CSV ファイルにダミーのタグ(例えば「java」という単語 1 つだけ)を作成してアップロードしてみましたが、同じエラーメッセージが表示されます。

参考までに、Discourse は公式インストールガイドに従って DigitalOcean にインストールしましたが、他の機能は正常に動作しています。

よろしくお願いいたします。

「いいね!」 1

月曜日にこれを再現できますか、@tshenry

「いいね!」 2

@codinghorror さん、ありがとうございます。何か見つかりましたら、ぜひお知らせください。参考までに、私は 4 GB の RAM と 80 GB の SSD を搭載した Droplet 上で 2.5.0.beta7(14dc6f350e)を実行しています。

これとは別に、akismet、formatting-toolbar、discourse-voting プラグインもインストールしています。

try.discourse.org でこれをテストしてみました。基本的なテキストエディタを使って java という単語だけを含む tags.csv という CSV ファイルを作成し、一括タグアップロードツールを使用して問題なく新しいタグを追加することができました。

try.discourse.org サイトには Akismet と discourse-voting が導入されていますが、formatting-toolbar プラグインがご提示いただいたエラーを引き起こすような競合を発生させることはまずないでしょう。

他のコンテキスト(投稿やテーマなど)では問題なくファイルをアップロードできますか?

@tshenry さん、こんにちは。ご質問の意図が画像の投稿へのアップロード可能かどうかであれば、はい、可能です。

ドロプレットを破棄し、Discourse を再インストールしました。現在、以下のプラグインのみを使用しています。

しかし、アップロードは依然として失敗します。権限の問題でしょうか?私はサイトの管理者ですので、すべての権限を持っているはずです。

今回は 2.5.0.beta7 (70e50a2255) を使用しています。

他に試すべきことがあればお知らせください。よろしくお願いいたします!

あー、面白いものを見つけました @codinghorror @tshenry

タグファイルの名前が tags-1.csv の場合、アップロードエラーが発生します。ファイル名を tags.csv にすると、タグのアップロードが成功します :slight_smile:

この命名規則は Discourse に必要なもの(私が読み逃していたかもしれませんが)でしょうか、それともバグでしょうか?

「いいね!」 1

ええと、ファイル名を tags-1.csv に変更してみましたが、エラーを再現できませんでした。元のファイル名に戻して再度アップロードすると、また失敗しますか?もしかすると、元のファイル名に何か別の問題があり、tags.csv に変更することで何らかの理由で解決したのかもしれません。

「いいね!」 1

いいえ、まだ私の環境では動作しません。私の Mac では、以下の手順を踏んでいるだけです。

$ vi tags-1.csv

次に
i で編集モードに入る
java
esc で編集モードを終了
:wq を入力して Enter を押し、保存して終了します。

以上です。これも失敗します。当初は、Excel から CSV としてエクスポートされたことが原因かと思ったのですが、コマンドラインでの編集でも問題が発生します。

当面は tags.csv で進めますが、これが重要でテストを実行してほしいと思われる場合は、喜んで行います。同じ現象が、fresh install の異なる 2 つの droplet でも発生しており、少し心配になりました。

@tshenry さん、ありがとうございます。

「いいね!」 1

別の問題も発見しました(これも私の環境に関連するものかどうかはわかりません)。

私のタグはプログラミング言語のリストです。そのリストに C++ と C# が入っていたのですが、tags.csv からそれらを削除すると、一括アップロードが成功しました。タグが特殊文字で終わっていることが原因なのかもしれません。また、これも私だけの問題かもしれませんが :man_shrugging:

「いいね!」 2

それはほぼ間違いなく問題の原因です。無効なタグに対して、より良いエラーを返すことはできないでしょうか?

「いいね!」 1

はい、それが間違いなく問題です。前の投稿を踏まえると、ファイル内で java という単語のみを扱っているかと思っていました。cpp や C# などの言語を使用する必要があります。

そうですね、それが理想的だと思います。現在のエラーメッセージでは、ユーザーがどう対処すればよいかがほとんどわかりません。

申し訳ありませんが、ファイルのアップロード中にエラーが発生しました。もう一度お試しください。

興味深いことに、私は知らなかったのですが、通常のトピック作成や編集のコンテキストでタグを作成しようとする場合、記号は静かに除去されるようです。そのため、C++ と入力すると、タグとして C が提案されます。

コピーを編集して(無効なタグの可能性を示すように)しようかと思ったのですが、そのコピーはすべてのアップロードに適用されるため、常に正確とは限りません。

「いいね!」 1

個人的な意見ですが、管理設定の「タグ」セクションに、タグ名の制限について数文を記載するのが素早い解決策だと思います。

また、Discourse タグガイド(https://meta.discourse.org/t/a-comprehensive-guide-to-discourse-tags/121041)にも警告を追加するとよいでしょう。

「いいね!」 2

はい、確かにそのようです。タグアップロードコードで汎用エラーがスローされる場所が見つかったので、このケースに特化したより具体的なエラーを PR で作成してみます。

「いいね!」 2