Fatal: 'https://github.com' のユーザー名を読み取れません

2コンテナ構成のフォーラムのアップグレードを試みましたが、失敗しました。原因について何か考えられることはありますか?

x86_64 arch detected.                                                                                                                                                    
2.0.20260803-0122: Pulling from discourse/base                                                                                                                           
Digest: sha256:ab1e7217470759e63313a16bc5b71b9f2dd7d3ae8303286e5985f563ad12b7b3                                                                                          
Status: Image is up to date for discourse/base:2.0.20260803-0122                                                                                                         
docker.io/discourse/base:2.0.20260803-0122                                                                                                                               
/usr/local/lib/ruby/gems/3.4.0/gems/pups-1.4.0/lib/pups.rb                                                                                                               /usr/local/bin/pups --stdin                                                                                                                                              
I, [2026-09-02T16:49:46.027794 #1]  INFO -- : Reading from stdin                                                                                                         
I, [2026-09-02T16:49:46.066073 #1]  INFO -- : > thpoff echo "thpoff is installed!"                                                                                       thpoff is installed!                                                                                                                                                     
I, [2026-09-02T16:49:46.079514 #1]  INFO -- : > /usr/local/bin/ruby -e 'if (ENV["DISCOURSE_SMTP_ADDRESS"] == "smtp.example.com" && ENV["DISCOURSE_SKIP_EMAIL_SETUP"] != "
1"); puts "Aborting! Mail is not configured!"; exit 1; end'                                                                                                              
I, [2026-09-02T16:49:46.242618 #1]  INFO -- : > /usr/local/bin/ruby -e 'if ENV["DISCOURSE_HOSTNAME"] == "discourse.example.com"; puts "Aborting! Domain is not configured!"; exit 1; end'                                                                                                                                                         I, [2026-09-02T16:49:46.351184 #1]  INFO -- : > /usr/local/bin/ruby -e 'if (ENV["DISCOURSE_CDN_URL"] || "")[0..1] == "//"; puts "Aborting! CDN must have a protocol specified. Once fixed you should rebake your posts now to correct all posts."; exit 1; end'                                                                                   I, [2026-09-02T16:49:46.497030 #1]  INFO -- : > rm -f /etc/cron.d/anacron                                                                                                I, [2026-09-02T16:49:46.504864 #1]  INFO -- : File > /etc/cron.d/anacron  chmod:   chown:                                                                                I, [2026-09-02T16:49:46.512848 #1]  INFO -- : File > /etc/runit/1.d/copy-env  chmod: +x  chown:  I, [2026-09-02T16:49:46.525056 #1]  INFO -- : File > /etc/service/unicorn/run  chmod: +x  chown: 
I, [2026-09-02T16:49:46.533676 #1]  INFO -- : File > /etc/service/nginx/run  chmod: +x  chown:  
I, [2026-09-02T16:49:46.542104 #1]  INFO -- : File > /etc/runit/3.d/01-nginx  chmod: +x  chown:   
I, [2026-09-02T16:49:46.557772 #1]  INFO -- : File > /etc/runit/3.d/02-unicorn  chmod: +x  chown:            
I, [2026-09-02T16:49:46.566700 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse git clean -f
I, [2026-09-02T16:49:46.797286 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse bash -c '
  set -o errexit                                                                    
  git fetch --tags --prune-tags --prune --force origin                                                                                                                   
  if [[ $(git symbolic-ref --short HEAD) == latest ]] ; then                                                                                                             
      git pull                                                                      
  else                                                                              
      git -c advice.detachedHead=false checkout latest                                                                                                                   
  fi                                                                                
'                                                                                   
fatal: could not read Username for 'https://github.com': No such device or address                                                                                       
fatal: expected flush after ref listing                                             


FAILED                                                                              
--------------------                                                                
Pups::ExecError: cd /var/www/discourse && sudo -H -E -u discourse bash -c '                                                                                              
  set -o errexit                                                                    
  git fetch --tags --prune-tags --prune --force origin                                                                                                                   
  if [[ $(git symbolic-ref --short HEAD) == latest ]] ; then                                                                                                             
      git pull                                                                      
  else                                                                              
      git -c advice.detachedHead=false checkout latest                                                                                                                   
  fi                                                                                
' failed with return #<Process::Status: pid 34 exit 128>                                                                                                                 
Location of failure: /usr/local/lib/ruby/gems/3.4.0/gems/pups-1.4.0/lib/pups/exec_command.rb:138:in 'Pups::ExecCommand#spawn'
exec failed with the params {"cd" => "$home", "tag" => "build", "hook" => "code", "cmd" => ["sudo -H -E -u discourse git clean -f", "sudo -H -E -u discourse bash -c '\n 
 set -o errexit\n  git fetch --tags --prune-tags --prune --force origin\n  if [[ $(git symbolic-ref --short HEAD) == $version ]] ; then\n      git pull\n  else\n      gi
t -c advice.detachedHead=false checkout $version\n  fi\n'", "sudo -H -E -u discourse git config user.discourse-version $version", "mkdir -p tmp", "chown discourse:www-da
ta tmp", "mkdir -p tmp/pids", "mkdir -p tmp/sockets", "touch tmp/.gitkeep", "mkdir -p                    /shared/log/rails", "bash -c \"touch -a           /shared/log/ra
ils/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log\"", "bash -c \"ln    -s           /shared/log/rails/{production,production_errors,unicorn.st
dout,unicorn.stderr,sidekiq}.log $home/log\"", "bash -c \"mkdir -p           /shared/{uploads,backups}\"", "bash -c \"ln    -s           /shared/{uploads,backups} $home/
public\"", "bash -c \"mkdir -p           /shared/tmp/{backups,restores}\"", "bash -c \"ln    -s           /shared/tmp/{backups,restores} $home/tmp\"", "chown -R discours
e:www-data /shared/log/rails /shared/uploads /shared/backups /shared/tmp", "[ ! -d public/plugins ] || find public/plugins/ -maxdepth 1 -xtype l -delete"]}
bootstrap failed with exit code 128                                                 
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.                                                                                                                        
f21423e74889e97cf80d8d237c4ca8bb1d4674e6e3a0a30527d1b4394d5d8c98

うん、公式に私もダウン状態になった。

まず、Oops The software powering this discussion forum encountered an unexpected problem というエラーが出た。

これ、見たことがない。なので、何が起きているのか調べるためにログインして再起動した。

効果はなかった。まあ、新しいユーザーが流入してきているので、ダウンしているわけにはいかない。だから数ヶ月間アップグレードしていなかった。でも、少なくともアプリの再構築はやらなければならないようだ。

ところが、ユーザー名の質問で失敗する。

./discourse-doctor を試したが、同じGitHubエラーで終わった。

ログを見てみようと思う。

注:ディスクスペースはきれいな5G残っているが、通常はギリギリの状態でアップグレードを済ませてきた。ディスクスペースを倍にするとコストも倍になるし、これまで一度もこの環境全体を自分のサーバーに移行する時間がなかった。

ログを確認してみたが、/usr/local/lib/ruby/3.4.0/socket.rb:1639:in 'Socket#__connect_nonblock': Connection refused - connect(2) for 127.0.0.1:6379 (Errno::ECONNREFUSED) のような接続拒否が大量に記録されているのが気になった。

おそらく関連があるのでしょうか?

フォーラムのコンポーネントを更新できず、rebuildを実行すると予期しない出力が表示されます。

./launcher rebuild app
arm64 arch detected.
WARNING: This output is designed for human readability. For machine-readable output, please use --format.
Ensuring launcher is up to date
Username for 'https://github.com':

私のフォーラムは discourse.diy ドメインを使用しています。

たぶんそうだと思います。そういうふうに聞こえます。

今日早些に始まりました。おそらくVoiceがコアに追加されたときに発生したのだと思います。ただ、これは私の感覚にすぎません。

あとは待つしかないですね :man_shrugging:

今では2コンテナ構成の方が本当に好きになってきました…

GitHub側の問題のようです。こちらでディスカッションが見つかりました: Unauthenticated clone of a public repo intermittently returns 401 (prompts for Username) from CI workers · community · Discussion #206581 · GitHub

こんにちは!:waving_hand: ご報告ありがとうございます。内部チームに共有して調査を進めています。進展があれば、こちらと関連するディスカッションに投稿します :sparkles:

一時的な回避策として、以下の方法が機能します。ただし、まずは待機されることをお勧めします:

cd /var/discourse
git config --global http.version HTTP/1.1
./launcher rebuild app

(PostgreSQLのアップグレードにより、2回リビルドする必要がある場合があります)

今日、エラー(ディスク容量不足によるもの以外)なく、約10サイトのアップグレードを行いました。

これはコマンドラインによるアップグレードのように見えますが、そうでない場合でも、私は間違いなくその方法を推奨します。

5GBは「きれいな」状態ではなく、新しいコンテナを構築するほどの容量にすらなりません。最近 ./launcher cleanup を実行しましたか?

それは理にかなっています。そして、おそらく全員が同じように影響を受けているわけではないでしょう。

はるかに影響が小さい代替手段として、設定を以下のように変更する方法もあります:

# docker exec -i -u discourse app git config --global http.version HTTP/1.1

(もちろん、自己責任でお願いします。)

いつものように、この問題を少し広げて、3〜5箇所の障害に関する、まあまあ面白い(?)物語としてお話しします。
真夜中に4時間かけて調査した後の話なので、そう面白いものでもありません。技術的に不正確な部分もあるかもしれませんが、間違いを含めながらでも、より読みやすくするためにこうしています。

基本的事実(説明が長くなってすみません):私のSSOは自宅サーバーにリダイレクトされます(数年前にGandiがいくつかの問題を解決できず、Dynadotに移行したためです)。また、Hostpapaが非常に信頼できるLFCホスティングを買収したことで、彼らが何かを無言でアップグレードして、インフラ全体がダウンするリスクを避けるためにも、リダイレクトする方がうまくいくことがわかりました。

さて、ここからが3箇所(いや、これを5箇所もの障害としてカウントしてもいいでしょうか?それなら新記録です)です。

1*) Operaが今日また更新され、どうやら301/302リダイレクトを非常に(好まない)扱い、それらをハードキャッシュしてしまうコードが追加されたようです(Chromium関連)。
2*) Dynadotが今夜30秒以上の遅延が発生していたようです(Chromiumの問題を引き起こすのに必要な時間であり、これがキャッシュされてしまったので、まずい)。
3*) Discourseがクラッシュしました(上記のoopsのことです)。SSOに30秒以内にアクセスできなかったためです。アプリを再起動する必要がありましたが、Discourseが再起動までダウンしていたのか、それともダウンしていなかったのかは実際には不明です(パニックモードになっていました :wink: )。Geminiはログに基づいて、sso/rails/redisなどをループで実行するよう私に提案しました。これはアップグレードを試みた後ですが、この点に関連付けて述べています。
4*) 何が起きているのか理解できないため、念のためLinuxを再起動し、Discourseのアップグレードを開始しました。しかし、GitHubの問題により失敗しました。そして、いつものようにまずディスクを少しクリーンアップする必要がありましたが、0GBにはなっていませんでした(それならredisの問題の原因にもなり得たでしょう)。そして、はい、今後は安定したように見えるので、クラウドに10GB追加し、おそらくArkshineのアップグレードも行う予定です。
5*) 1番目の問題に近いですが、これらすべてを解決しようとしている間、どこかで修正されたか確認するためにページを何度もハードリフレッシュしていました。おそらく、最初の障害からキャッシュされたリダイレクトに常にヒットしているのだろうと推測していますが、そのため、最初の再起動後も問題が修正されたかどうかも見ることができません。

  1. SSOには問題なくアクセスできます。
  2. SSOを使用していない別のドメインのサイトも正常に動作しています。
  3. DiscourseでSSOを無効にするとフォーラムは表示されますが、通常のログインが機能したことがないので、あまり助けにはなりません。しかし、少なくとも本当にSSOが問題を引き起こしていることはわかりました。
  4. Geminiはプライベートウィンドウでテストするよう提案したので、実際にFirefoxを起動してみたら、フォーラムは正常に動作していました。素晴らしい、ただし… ええと?
  5. Operaは依然として失敗します。はい、おそらくリダイレクトをキャッシュしているのでしょうが、当時私はそれを知らませんでした。まだサイトのCookieやキャッシュなどをクリアするつもりはありません。
  6. 動作していることがわかったので、実際にやりたかった作業をFirefoxを使って30分ほど行いました。
  7. Operaを再起動したら、ほら、フォーラムが表示されました。もう少し早くOperaを再起動していたかもしれません、覚えていませんが、おそらくキャッシュがタイムアウトして、適切なリフレッシュが行われたのでしょう。

面白いことに、今朝目覚めたらOperaがまたアップグレードされていました。このハードキャッシュのアップグレードが、他の場所でも多くの問題を引き起こしたかもしれません :slight_smile:

追記:3) はもちろん、私たちにとって最も興味深い部分です。まだログから見つかるかもしれません(必要なら掘り下げます)。Discourseがクラッシュした場合、タイマーを使って再起動を試みますか?それとも、アプリを再起動するまでサイト全体がダウンしていたのですか?

自己ホスティングしているDiscourseインスタンスが2つあり、現在ダウンしています。ログには次のような行が表示されています:

I, [2026-09-03T06:02:41.640393 #80]  INFO -- : reaped unknown subprocess #<Process::Status: pid 3079826 exit 128>
I, [2026-09-03T06:03:10.006495 #80]  INFO -- : reaped unknown subprocess #<Process::Status: pid 3079864 exit 128>
I, [2026-09-03T06:03:10.394732 #80]  INFO -- : reaped unknown subprocess #<Process::Status: pid 3079871 exit 128>
E, [2026-09-03T06:03:10.518338 #722] ERROR -- : worker=0 gen=0 pid=722 timed out, exiting
I, [2026-09-03T06:03:10.530245 #722]  INFO -- : worker=0 gen=0 pid=722 exiting

終了コード128はGitに非常に似ていて怪しいです。

これに関連している可能性がありますでしょうか?もしそうだとしたら、なぜGitHubの参照失敗がインスタンスダウンの原因になるのでしょうか?

これに関連しているのかもしれない🤔

こんにちは、

今は動作しているようです。最初の再ビルドではエラーが発生しましたが、2回目の試行で更新が完了し、Discourseが再びオンラインになりました。バージョンチェックも正常に動作しています。