我尝试从 2.3.5 升级到 2.4.2(在 Google Cloud 上的 Bitnami Docker 容器中)。
将 2.3.5 的备份归档恢复到新的 2.4.2 环境时直接失败了。
解压归档后,我获取了 pg_dump 文件并将其加载到一个新数据库中。大部分看起来没问题,但有两个错误:
> ERROR: schema "discourse_functions" does not exist
> ERROR: schema "discourse_functions" does not exist
所以缺少了一些东西……
尽管如此,我还是尝试了以下操作:
> /opt/bitnami/apps/discourse/htdocs$ sudo bin/rake db:migrate RAILS_ENV=production
> rake aborted!
> PG::InsufficientPrivilege: ERROR: permission denied for table site_settings
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/mini_sql-0.2.4/lib/mini_sql/postgres/connection.rb
> :118:in `exec'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/mini_sql-0.2.4/lib/mini_sql/postgres/connection.rb
> :118:in `run'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/mini_sql-0.2.4/lib/mini_sql/postgres/connection.rb
> :82:in `query'
> /opt/bitnami/apps/discourse/htdocs/lib/site_settings/db_provider.rb:19:in `all'
> /opt/bitnami/apps/discourse/htdocs/lib/site_settings/defaults_provider.rb:29:in `db_all'
> /opt/bitnami/apps/discourse/htdocs/lib/site_setting_extension.rb:277:in `block in refresh!'
> /opt/bitnami/apps/discourse/htdocs/lib/site_setting_extension.rb:274:in `synchronize'
> /opt/bitnami/apps/discourse/htdocs/lib/site_setting_extension.rb:274:in `refresh!'
> /opt/bitnami/apps/discourse/htdocs/lib/site_setting_extension.rb:495:in `block in setup_methods'
> /opt/bitnami/apps/discourse/htdocs/config/initializers/004-message_bus.rb:120:in `<top (required)>'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/dependencie
> s.rb:319:in `load'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/dependencie
> s.rb:319:in `block in load'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/dependencie
> s.rb:291:in `load_dependency'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/dependencie
> s.rb:319:in `load'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/engine.rb:667:in `block i
> n load_config_initializer'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notificatio
> ns.rb:182:in `instrument'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/engine.rb:666:in `load_co
> nfig_initializer'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/engine.rb:624:in `block (
> 2 levels) in <class:Engine>'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/engine.rb:623:in `each'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/engine.rb:623:in `block i
> n <class:Engine>'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/initializable.rb:32:in `i
> nstance_exec'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/initializable.rb:32:in `r
> un'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/initializable.rb:61:in `b
> lock in run_initializers'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/initializable.rb:50:in `e
> ach'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/initializable.rb:50:in `t
> sort_each_child'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/initializable.rb:60:in `r
> un_initializers'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/application.rb:363:in `in
> itialize!'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/railtie.rb:190:in `public
> _send'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/railtie.rb:190:in `method
> _missing'
> /opt/bitnami/apps/discourse/htdocs/config/environment.rb:7:in `<top (required)>'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.2/lib/zeitwerk/kernel.rb:23:in `requi
> re'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.2/lib/zeitwerk/kernel.rb:23:in `requi
> re'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/dependencie
> s.rb:325:in `block in require'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/dependencie
> s.rb:291:in `load_dependency'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/dependencie
> s.rb:325:in `require'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/application.rb:339:in `re
> quire_environment!'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/application.rb:515:in `bl
> ock in run_tasks_blocks'
> /opt/bitnami/apps/discourse/htdocs/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
> Tasks: TOP => db:migrate => db:load_config => environment
> (See full trace by running task with --trace)
任何建议都感激不尽。
Stephen
(Stephen)
2020 年5 月 1 日 17:16
2
很抱歉,Bitnami 包在此无法提供支持。这是一个第三方包,如果您希望继续使用它,需要联系其开发者以获取任何帮助。
我们的建议是进行完整备份,然后使用受支持的 标准安装方法 重新安装。
2 个赞
你好,Stephen,
将 2.3.5 的备份归档恢复到标准的 2.4.2 安装中,应该可以正常运行吗?
Stephen
(Stephen)
2020 年5 月 1 日 17:33
4
理论上应该如此,但请勿完全听信于此,务必为自己预留备用方案。请记住,您当前运行的是不受支持的版本,因此我只能提供建议,帮助您转向更受支持的部署方式。但 Bitnami 的安装存在诸多问题,最好做好最坏的打算。
如果您在独立的服务器上构建环境,可以在对现有安装进行任何不可逆的更改之前先进行测试。
一些背景信息:
我们在 Amazon 上运行的是 2.3.5 版本。
我们尝试在 Google Cloud 和 VirtualBox 的 Ubuntu 18.04 LTS 虚拟机上,使用 Docker 构建标准的安装包。问题相同。
我们无法构建 v2.3.5 的 Discourse Docker 镜像(内置 PostgreSQL/Redis),也无法构建 v2.3.10。两者在 Google Cloud 和 Ubuntu 18.04 的 VirtualBox 虚拟机上都因 PostgreSQL 权限问题而失败。
不过,稳定版(2.4.2)可以构建,但无论是 Google Cloud 还是 VirtualBox 上的 Docker 2.4.2 镜像都无法加载。两者在构建“discourse functions”时均失败。
我们将按照您提供的链接中的构建流程尝试,并随后反馈结果。我是否应该为每个环境的尝试分别创建不同的主题?
如果确实遇到问题,我可以随后发布每个环境具体卡在哪一步。
Google Cloud 上运行 Ubuntu 18.04 的实例是否受支持?其 SQL 服务呢?
Stephen
(Stephen)
2020 年5 月 1 日 18:01
7
支持,但其环境比 DigitalOcean 更复杂。在 DigitalOcean 上安装最多只需 30 分钟,而且您无需担心 ACL 和网络策略问题。
pfaffman
(Jay Pfaffman)
2020 年5 月 1 日 18:07
8
例如,查看 /var/discourse/templates/web_only.yml(或类似文件,凭记忆)以了解如何使用外部数据库。
一旦你启动了一个空站点,就可以使用 discourse restore 恢复备份。
2 个赞
我们尝试在 Ubuntu 18.04 虚拟机中构建 2.3.5 版本的 Discourse。在 app.yml 中添加了版本:“v2.3.5”,但在以下位置失败:
> FAILED--------------------Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle install --deployment --retry 3 --jobs 4 --verbose --without test development' failed with return #<Process::Status: pid 353 exit 1>Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'exec failed with the params {"cd"=>"$home", "hook"=>"bundle_exec", "cmd"=>["su discourse -c 'bundle install --deployment --retry 3 --jobs 4 --verbose --without test development'"]}a3cebbd8e5a24b8a2b248886f0fa195f401720a6dc7084ad78af6cee345de9a9** 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-doctor 可能有助于诊断问题。
我应该尝试在 DigitalOcean 上部署,还是使用外部数据库?
看起来 Google 所有在一体 18.0.4 LTS 实例上安装的 v2.3.5 Discourse 容器在此处崩溃了:
> [2020-05-01T18:54:20.903566 #1] INFO -- : > cd /var/www/discourse && su discourse -c 'bundle install --deployment --retry 3 --jobs 4 --verbose --without test development'/usr/local/lib/ruby/site_ruby/2.6.0/rubygems.rb:275:in `find_spec_for_exe': 找不到您的 /var/www/discourse/Gemfile.lock 所需的 'bundler' (1.17.3)。(Gem::GemNotFoundException)
要更新到系统上安装的最新版本,请运行 `bundle update --bundler`。
要安装缺失的版本,请运行 `gem install bundler:1.17.3`
from /usr/local/lib/ruby/site_ruby/2.6.0/rubygems.rb:294:in `activate_bin_path'
from /usr/local/bin/bundle:23:in `<main>'
I, [2020-05-01T18:54:21.234673 #1] INFO -- : I, [2020-05-01T18:54:21.235321 #1] INFO -- : 终止异步进程
I, [2020-05-01T18:54:21.235582 #1] INFO -- : 向 HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/10/bin/postmaster -D /etc/postgresql/10/main pid: 64 发送 INT
I, [2020-05-01T18:54:21.235838 #1] INFO -- : 向 exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 181 发送 TERM
2020-05-01 18:54:21.236 UTC [64] LOG: 收到快速关闭请求
181:signal-handler (1588359261) 收到 SIGTERM,正在调度关闭...
2020-05-01 18:54:21.241 UTC [64] LOG: 中止任何活跃事务
2020-05-01 18:54:21.248 UTC [64] LOG: 工作进程:逻辑复制启动器 (PID 73) 以退出代码 1 退出
2020-05-01 18:54:21.248 UTC [68] LOG: 正在关闭
181:M 01 May 2020 18:54:21.268 # 用户请求关闭...
181:M 01 May 2020 18:54:21.269 * 在退出前保存最终的 RDB 快照。
181:M 01 May 2020 18:54:21.271 * 数据库已保存到磁盘
181:M 01 May 2020 18:54:21.271 # Redis 现在准备退出,再见...
2020-05-01 18:54:21.288 UTC [64] LOG: 数据库系统已关闭
Stephen
(Stephen)
2020 年5 月 1 日 19:24
12
为什么不构建 stable 并测试将其恢复到该版本呢?
我们应该使用命令行命令,还是通过 UI 中的恢复操作?
mkitezr
(Basil Baluta)
2020 年5 月 4 日 19:01
16
好的,我们成功搭建了 2.4.2 环境。不过,备份是从配置了 S3 的 Amazon 部署中完成的。将备份恢复到非 Amazon 环境时,在某些 S3 脚本处失败了。
> 正在重新连接数据库...
> 正在重新加载站点设置...
> 正在为非工作人员用户禁用出站邮件...
> 正在禁用只读模式...
> 正在清除分类缓存...
> 正在清除表情符号缓存...
> 正在清除主题缓存
> 正在重新映射上传文件...
> 正在恢复上传文件,这可能需要一些时间...
> 正在将上传文件迁移到 'default' 的 S3...
> 正在上传文件到 S3...
> - 列出本地文件
> => 3 个文件
> - 列出 S3 文件
> . => 3 个文件
> - 将文件同步到 S3
> ...
> 正在更新数据库中的 URL...
> 正在删除旧的优化图片...
> 正在标记所有包含灯箱的帖子以重新烘焙
> 182 个帖子已被标记为需要重新烘焙
> 异常:295 个上传文件中有 215 个未迁移到 S3。数据库 'default' 的 S3 迁移失败。
> /var/www/discourse/lib/file_store/to_s3_migration.rb:131:in `raise_or_log'
> /var/www/discourse/lib/file_store/to_s3_migration.rb:78:in `migration_successful?'
> /var/www/discourse/lib/file_store/to_s3_migration.rb:351:in `migrate_to_s3'
> /var/www/discourse/lib/file_store/to_s3_migration.rb:65:in `migrate'
> /var/www/discourse/lib/file_store/s3_store.rb:203:in `copy_from'
> /var/www/discourse/lib/backup_restore/uploads_restorer.rb:48:in `restore_uploads'
> /var/www/discourse/lib/backup_restore/uploads_restorer.rb:30:in `restore'
> /var/www/discourse/lib/backup_restore/restorer.rb:59:in `run'
> script/discourse:143:in `restore'
> /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/command.rb:27:in `run'
> /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command'
> /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch'
> /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/base.rb:485:in `start'
> script/discourse:284:in `<top (required)>'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `load'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `kernel_load'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:28:in `run'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:476:in `exec'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invok
> e_command'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:30:in `dispatch'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:24:in `start'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:46:in `block in <top (required)>'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:34:in `<top (required)>'
> /usr/local/bin/bundle:23:in `load'
> /usr/local/bin/bundle:23:in `<main>'
> 正在尝试回滚...
> 正在回滚...
> 正在清理内容...
> 正在从 discourse_functions 架构中删除函数...
> 正在删除临时目录 '/var/www/discourse/tmp/restores/default/2020-05-01-230400'...
> 正在恢复 sidekiq 的运行...
> 正在标记恢复为已完成...
> 正在通知 'system' 恢复已结束...
> 完成!
> [失败]
> 恢复完成。
现在该怎么办?
pfaffman
(Jay Pfaffman)
2020 年5 月 4 日 21:00
18
仅执行数据库备份和还原,并手动迁移本地资源。
我遇到该问题的站点,其资源分布在两个不同的 S3 存储桶中。
1 个赞