Ошибка миграции в 'rename_discourse_rewind_disabled_to_enabled'

Повторная сборка не удалась~ Вот журнал:

discourse -c 'bundle exec rake db:migrate'
rake aborted!
StandardError: Произошла ошибка, эта и все последующие миграции отменены: (StandardError)

Необходимо удалить значение по умолчанию для столбца, прежде чем помечать его как только для чтения
I, [2026-01-08T16:18:49.016491 #1]  INFO -- : Завершение асинхронных процессов
I, [2026-01-08T16:18:49.018961 #1]  INFO -- : Отправка INT для HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main pid: 46
I, [2026-01-08T16:18:49.020147 #1]  INFO -- : Отправка TERM для exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 113
2026-01-08 16:18:49.019 UTC [46] LOG:  получен запрос быстрого завершения
113:signal-handler (1767889129) Получен SIGTERM, планирование завершения...
2026-01-08 16:18:49.023 UTC [46] LOG:  отмена всех активных транзакций
2026-01-08 16:18:49.034 UTC [46] LOG:  фоновый рабочий "logical replication launcher" (PID 60) завершил работу с кодом выхода 1
2026-01-08 16:18:49.040 UTC [55] LOG:  завершение работы
2026-01-08 16:18:49.042 UTC [55] LOG:  начало контрольной точки: завершение работы немедленно
2026-01-08 16:18:49.057 UTC [55] LOG:  контрольная точка завершена: записано 32 буфера (0.1%); добавлено 0 файлов WAL, удалено 0, переработано 0; запись=0.007 с, синхронизация=0.004 с, всего=0.017 с; файлы синхронизации=16, максимальное время=0.002 с, среднее=0.001 с; расстояние=180 КБ, оценка=180 КБ
2026-01-08 16:18:49.067 UTC [46] LOG:  система баз данных завершена
113:M 08 Jan 2026 16:18:49.108 # Пользователь запросил завершение...
113:M 08 Jan 2026 16:18:49.108 * Сохранение финального снапшота RDB перед выходом.
113:M 08 Jan 2026 16:18:49.123 * База данных сохранена на диск
113:M 08 Jan 2026 16:18:49.123 # Redis теперь готов к выходу, пока...


ОШИБКА
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' завершилась с ошибкой, код возврата #<Process::Status: pid 4483 exit 1>
Место ошибки: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/exec_command.rb:131:in `spawn'
Выполнение не удалось с параметрами {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
Загрузка не удалась с кодом выхода 1
** НЕ УДАЛОСЬ ЗАПУСТИТЬ ** пожалуйста, прокрутите вверх и найдите более ранние сообщения об ошибках, их может быть несколько.
./discourse-doctor может помочь в диагностике проблемы.

Извините, это моя ошибка. В миграции ограничение по умолчанию / null было указано в неправильном порядке :man_facepalming:

Ничего страшного, ждём, когда ты это исправишь. Удачи, удачи~

У меня та же проблема после последнего обновления.

Исправление от @zogstrip для этой миграции уже доступно в ветке latest, поэтому повторное обновление должно восстановить работоспособность.

Только что пересобрал, но всё равно не работает

Я только что попробовал выполнить rebuild, но он снова не удался. В чём причина?

I, [2026-01-09T05:09:31.402079 #1]  INFO -- : > exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf
I, [2026-01-09T05:09:31.409979 #1]  INFO -- : > sleep 10
4481:C 09 Jan 2026 05:09:31.416 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
4481:C 09 Jan 2026 05:09:31.416 # Redis version=7.0.15, bits=64, commit=00000000, modified=0, pid=4481, just started
4481:C 09 Jan 2026 05:09:31.416 # Configuration loaded
4481:M 09 Jan 2026 05:09:31.417 * monotonic clock: POSIX clock_gettime
4481:M 09 Jan 2026 05:09:31.418 # Warning: Could not create server TCP listening socket *:6379: bind: Address already in use
4481:M 09 Jan 2026 05:09:31.418 # Failed listening on port 6379 (TCP), aborting.
I, [2026-01-09T05:09:41.418357 #1]  INFO -- : 
I, [2026-01-09T05:09:41.421210 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled: (StandardError)

You must drop a column's default value before marking it as readonly
/var/www/discourse/lib/migration/column_dropper.rb:15:in `mark_readonly'
/var/www/discourse/plugins/discourse-rewind/db/migrate/20260105171115_rename_discourse_rewind_disabled_to_enabled.rb:15:in `up'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/migration.rb:993:in `public_send'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/migration.rb:993:in `exec_migration'
/var/www/discourse/lib/freedom_patches/schema_migration_details.rb:8:in `block in exec_migration'
I, [2026-01-09T05:09:52.683547 #1]  INFO -- : Terminating async processes
I, [2026-01-09T05:09:52.684945 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main pid: 45
112I, [2026-01-09T05:09:52.685640 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 112
:signal-handler (1767935392) Received SIGTERM scheduling shutdown...
2026-01-09 05:09:52.686 UTC [45] LOG:  received fast shutdown request
2026-01-09 05:09:52.691 UTC [45] LOG:  aborting any active transactions
2026-01-09 05:09:52.708 UTC [45] LOG:  background worker "logical replication launcher" (PID 59) exited with exit code 1
2026-01-09 05:09:52.713 UTC [54] LOG:  shutting down
2026-01-09 05:09:52.716 UTC [54] LOG:  checkpoint starting: shutdown immediate
112:M 09 Jan 2026 05:09:52.718 # User requested shutdown...
112:M 09 Jan 2026 05:09:52.718 * Saving the final RDB snapshot before exiting.
2026-01-09 05:09:52.734 UTC [54] LOG:  checkpoint complete: wrote 17 buffers (0.1%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.007 s, sync=0.004 s, total=0.020 s; sync files=14, longest=0.002 s, average=0.001 s; distance=71 kB, estimate=71 kB
2026-01-09 05:09:52.750 UTC [45] LOG:  database system is shut down
112:M 09 Jan 2026 05:09:52.763 * DB saved on disk
112:M 09 Jan 2026 05:09:52.763 # Redis is now ready to exit, bye bye...


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 4484 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/exec_command.rb:131:in `spawn'
exec failed with the params {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
** 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.

Честно говоря, я не знаю, в чём проблема с вашей установкой Discourse. Я просто пересобрал свой второй форум через терминал сервера, и всё снова работает. Сейчас я собираюсь пересобрать свой третий форум — надеюсь, там тоже всё будет в порядке.

Если вы вносили какие-либо изменения в файлы Discourse, то это, как я знаю, может вызвать проблемы в будущем. То же самое касается ручного добавления или установки плагинов.

Подождите немного, наберитесь терпения — те, кто знает больше меня, обязательно помогут. Одна из причин, почему мне нравится эта система и я перешёл на неё, — это сообщество. Именно оно делает её ещё лучше.

Редакция:
Однако на моём третьем форуме пересборка не удалась.
FAILED

Pups::ExecError: cd /var/www/discourse && su discourse -c ‘bundle exec rake db:migrate’ завершилась с ошибкой, код возврата: #<Process::Status: pid 4466 exit 1>
Место ошибки: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/exec_command.rb:131:in `spawn’
exec завершилась с ошибкой при параметрах {“cd”=>“$home”, “tag”=>“migrate”, “hook”=>“db_migrate”, “cmd”=>[“su discourse -c ‘bundle exec rake db:migrate’”]}
bootstrap завершился с кодом возврата 1
** FAILED TO BOOTSTRAP ** пожалуйста, прокрутите вверх и найдите сообщения об ошибках, которые появились раньше — их может быть несколько.
./discourse-doctor может помочь диагностировать проблему.
63e30cde8c7295d25def35eef74dea30714627609c3d38b49a8f80865e5759cf

А теперь перенаправление на мой второй форум… что… что… :rofl:

Спасибо за ваш ответ. Я не вносил никаких изменений и не устанавливал никаких дополнительных плагинов.

У меня также нет никаких вручную установленных плагинов на моём третьем форуме, но после неудачной перестройки и перенаправления на мой второй форум… Я также проверил файл конфигурации (nano containers/app.yml), и там всё в порядке… Что происходит? :smiley:

Сборка успешно завершена

Не для меня :frowning: У меня, к счастью, есть точка восстановления сервера от 01-05-2026. Во второй раз я не могу ни обновить, ни пересобрать Discourse. Сейчас я снова восстанавливаю его, и одно ясно:

  1. Сохранить все темы/статьи в текстовый файл.
  2. Надеюсь, проблема будет решена либо новой установкой Discourse, либо переходом на другую систему (чего я не хочу делать).

Где-то что-то упускаю, не знаю что именно, и это сводит с ума. Но, похоже, ретроградный уран берёт своё. Пока оставлю всё как есть и займусь исправлением багов в HELLDIVERS 2, потому что мне грустно :rofl:

Я понимаю ваше недовольство и приношу извинения. Я протестировал свои «исправления» локально как на моей базе данных разработки, так и на совершенно новой базе данных, и в обоих случаях всё работало отлично. Затем я протестировал их на размещённом экземпляре, который я использую для управляемого мной сообщества, и там они тоже сработали безупречно. Кроме того, они прошли все наши публичные CI-тесты (на GitHub), а также внутренние CI-тесты и дымовые тесты.

Однако ни одна из этих баз данных не содержала данных, затронутых этой миграцией :expressionless_face:

Мне жаль, что у всех вас был негативный опыт, и в следующий раз я буду осторожнее.

Так… безопасно ли попробовать сейчас, или это только ухудшит ситуацию? У меня та же проблема, и я ещё не пытался выполнить пересборку, увидев это.

После пересборки я обнаружил, что данные не актуальны, поэтому восстановил их из резервной копии двухдневной давности через панель администратора. На данный момент никаких проблем не выявлено.

Похоже, всё сработало отлично, и загрузка идёт как обычно, на случай если кто-то ещё сомневается.

@here для тех, у кого возникают проблемы, я думаю, что @david и я, возможно, нашли первопричину, но это сложно воспроизвести локально.

Не могли бы вы выполнить следующие SQL-запросы и сообщить результаты здесь?

Запрос #1

SELECT table_schema, column_name, column_default
FROM information_schema.columns
WHERE table_name = 'user_options' 
AND column_name = 'discourse_rewind_disabled'
ORDER BY table_schema;

Запрос #2

SELECT n.nspname, n.oid
FROM pg_namespace n
JOIN pg_class c ON c.relnamespace = n.oid
WHERE c.relname = 'user_options'
ORDER BY n.oid;

Запрос #3

SELECT table_schema, column_default IS NOT NULL as has_default
FROM information_schema.columns
WHERE table_name = 'user_options'
AND column_name = 'discourse_rewind_disabled';

Запрос #4

SELECT nspname, oid FROM pg_namespace
WHERE nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast', 'public')
AND nspname NOT LIKE 'pg_temp%'
AND nspname NOT LIKE 'pg_toast_temp%'
ORDER BY oid;

Спасибо :folded_hands:

Хорошо, без проблем. Я сейчас на улице, вернусь и проверю.

Эти команды нужно запускать внутри контейнера? При развёртывании Discourse с помощью Docker пароль по умолчанию для PostgreSQL какой?

Находясь внутри контейнера от имени пользователя discourse в корневой директории проекта Discourse, вы можете выполнить команду bin/rails db для подключения к нужной базе данных.