Pravi
(PK)
2020 年8 月 12 日 14:29
1
我试图将所有数据从 S3 迁移回我的服务器。但是,运行 rake uploads:migrate_from_s3 时返回错误:“在运行该任务之前必须禁用 S3 上传”。因此,我在 Discourse 设置中取消勾选了启用 S3 上传 选项,并在 app.yml 文件中添加了 DISCOURSE_USE_S3: false 。但依然没有成功,错误依旧。
[1] pry(main)> SiteSetting.enable_s3_uploads
=> false
[2] pry(main)> GlobalSetting.use_s3
=> false
[3] pry(main)> GlobalSetting.use_s3?
=> true
我很困惑。该如何禁用它?
1 个赞
您的 app.yml 是否包含 S3 环境变量?您可能需要检查这些变量以禁用 S3 上传。
Pravi
(PK)
2020 年8 月 12 日 14:47
3
什么是 S3 环境变量?在我的情况下,DISCOURSE_USE_S3 被保留在 env 中。
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
UNICORN_WORKERS: 2
## TODO: 此 Discourse 实例将响应的域名
DISCOURSE_HOSTNAME: engineersasylum.com
## 如果希望容器以与上述指定的相同主机名(-h 选项)启动,请取消注释
##(默认为 "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: 初始注册时将设为管理员和开发者的逗号分隔邮箱列表,例如 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'praveen369gen@gmail.com'
#S3 配置
DISCOURSE_USE_S3: false
DISCOURSE_S3_REGION: ap-south-1
DISCOURSE_S3_ACCESS_KEY_ID: AKxxxxxxxxxxxxxxxxxxxxxDQ
DISCOURSE_S3_SECRET_ACCESS_KEY: QWVxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxLigGs
DISCOURSE_S3_BUCKET: enginxxxxxxxxxxket
DISCOURSE_S3_BACKUP_BUCKET: enginxxxxxxxxxxxxcket
DISCOURSE_BACKUP_LOCATION: s3
1 个赞
neounix
(Dark Matter)
2020 年8 月 12 日 14:50
4
……别忘了 @Pravi ,在更改 yml 文件中的大多数变量后,必须重新构建你的容器(应用);有些变量可能只需停止并启动容器即可生效;但如有疑虑,请在修改 yml 文件后重新构建容器(应用)。
Pravi
(PK)
2020 年8 月 12 日 14:53
5
每次修改 app.yml 文件后,我都会重新构建容器。尽管如此,它仍然处于关闭状态。
试试将备份位置改为本地?
我不确定这是否会有帮助,但这将是我最好的选择。
Pravi
(PK)
2020 年8 月 12 日 15:20
7
我已将本地路径添加到备份位置,然后重新构建容器并尝试迁移,但仍未成功。系统提示:运行该任务前必须禁用 S3 上传 。
在 yml 中设置 DISCOURSE_USE_S3=false 并重新构建后,你运行了 rake 任务,但它仍然提示“你必须禁用 S3 上传”?你是否也进入了管理面板并在那里禁用了 S3?
目前,以下代码的输出是什么:
SiteSetting.Upload.enable_s3_uploads
SiteSetting.enable_s3_uploads
GlobalSetting.use_s3?
GlobalSetting.use_s3? 的逻辑并未以相同方式使用环境变量,而是采用如下方式:
def self.use_s3?
(@use_s3 ||=
begin
s3_bucket &&
s3_region && (
s3_use_iam_profile || (s3_access_key_id && s3_secret_access_key)
) ? :true : :false
end) == :true
end
我明白这可能会让人感到困惑,我会安排人员查看此问题。
目前,取消设置环境变量中的 DISCOURSE_USE_S3 和 DISCOURSE_S3_BUCKET,应该可以允许您从 S3 迁移。
2 个赞
Pravi
(PK)
2020 年8 月 12 日 18:49
11
这是我得到的结果:
[1] pry(main)> SiteSetting.Upload.enable_s3_uploads
=> true
[2] pry(main)> SiteSetting.enable_s3_uploads
=> false
[3] pry(main)> GlobalSetting.use_s3?
=> true
[4] pry(main)>
Pravi
(PK)
2020 年8 月 12 日 18:52
12
是的,我在 app.yml 中添加了 DISCOURSE_USE_S3=false,然后重新构建容器并运行 rake 任务,但输出结果仍然相同。是的,我已在管理页面中禁用了上传功能。
正如这里所说,你还应该在 yml 文件中取消设置 DISCOURSE_S3_BUCKET。可能只需在其前面加上 # 即可。
如果你将环境变量设置为 false 并重新构建,我不明白最后一个怎么可能是 true。SiteSetting 相关的设置来自你的管理面板,而 GlobalSettings 则是通过 app.yml 配置的。
Pravi
(PK)
2020 年8 月 12 日 19:04
16
我的管理面板中的 SiteSetting 已禁用。
Pravi
(PK)
2020 年8 月 12 日 19:06
17
S3 配置
#DISCOURSE_USE_S3: false
DISCOURSE_S3_REGION: ap-south-1
DISCOURSE_S3_ACCESS_KEY_ID: AKXXXXXXXXXXXXXXXDQ
DISCOURSE_S3_SECRET_ACCESS_KEY: AvsvsxxxxxxxxxxxxxxxxvcccccccLigGs
#DISCOURSE_S3_BUCKET: engineers-leakybucket
DISCOURSE_S3_BACKUP_BUCKET: engineers-backupbucket
DISCOURSE_BACKUP_LOCATION: s3
#DISCOURSE_S3_CDN_URL: https://engineers-leakybucket.s3.dualstack.ap-south-1.amazonaws.com
取消设置 DISCOURSE_USE_S3 和 DISCOURSE_S3_BUCKET 后,我遇到了以下错误:
root@ip-172-31-7-247-app:/var/www/discourse# rake uploads:migrate_from_s3
正在将上传文件从 S3 迁移到本地存储,站点为 'default'...
rake 执行失败!
NoMethodError: 未定义方法 `downcase',接收者为 nil:NilClass
/var/www/discourse/app/models/global_setting.rb:107:in `s3_bucket_name'
/var/www/discourse/app/models/site_setting.rb:157:in `absolute_base_url'
/var/www/discourse/lib/tasks/uploads.rake:138:in `migrate_from_s3'
/var/www/discourse/lib/tasks/uploads.rake:118:in `block in migrate_all_from_s3'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rails_multisite-2.3.0/lib/rails_multisite/connection_management.rb:68:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rails_multisite-2.3.0/lib/rails_multisite/connection_management.rb:78:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:118:in `migrate_all_from_s3'
/var/www/discourse/lib/tasks/uploads.rake:93:in `block in <main>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
任务:TOP => uploads:migrate_from_s3
(通过运行任务并添加 --trace 参数查看完整堆栈跟踪)
更新:
在取消设置 DISCOURSE_USE_S3 和 DISCOURSE_S3_BUCKET 之前:
[1] pry(main)> SiteSetting.Upload.enable_s3_uploads
=> true
[2] pry(main)> SiteSetting.enable_s3_uploads
=> false
[3] pry(main)> GlobalSetting.use_s3?
=> true
[4] pry(main)>
取消设置 DISCOURSE_USE_S3 和 DISCOURSE_S3_BUCKET 之后:
[1] pry(main)> SiteSetting.Upload.enable_s3_uploads
=> false
[2] pry(main)> SiteSetting.enable_s3_uploads
=> false
[3] pry(main)> GlobalSetting.use_s3?
=> false
[4] pry(main)>
1 个赞
neounix
(Dark Matter)
2020 年8 月 13 日 01:34
18
你好 @Pravi
是的,我刚才正要建议你将所有这些环境变量注释掉,然后尝试以下操作:
DISCOURSE_USE_S3: false
#DISCOURSE_S3_REGION: ap-south-1
#DISCOURSE_S3_ACCESS_KEY_ID: AKXXXXXXXXXXXXXXXDQ
#DISCOURSE_S3_SECRET_ACCESS_KEY: AvsvsxxxxxxxxxxxxxxxxvcccccccLigGs
##DISCOURSE_S3_BUCKET: engineers-leakybucket
#DISCOURSE_S3_BACKUP_BUCKET: engineers-backupbucket
#DISCOURSE_BACKUP_LOCATION: s3
#DISCOURSE_S3_CDN_URL: https://engineers-leakybucket.s3.dualstack.ap-south-1.amazonaws.com
不过,我刚刚阅读了你的最新更新(感谢提供的详细信息),看来你正在取得进展。
祝贺你取得了一些进展。做得好!
Pravi
(PK)
2020 年8 月 13 日 04:08
19
我也试过了。除了 DISCOURSE_USE_S3: false 之外,我把其他所有内容都注释掉了,但弹出的错误和之前一样。
root@ip-172-31-7-247-app:/var/www/discourse# rake uploads:migrate_from_s3
Migrating uploads from S3 to local storage for 'default'...
rake aborted!
NoMethodError: undefined method `downcase' for nil:NilClass
/var/www/discourse/app/models/global_setting.rb:107:in `s3_bucket_name'
/var/www/discourse/app/models/site_setting.rb:157:in `absolute_base_url'
/var/www/discourse/lib/tasks/uploads.rake:138:in `migrate_from_s3'
/var/www/discourse/lib/tasks/uploads.rake:118:in `block in migrate_all_from_s3'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rails_multisite-2.3.0/lib/rails_multisite/connection_management.rb:68:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rails_multisite-2.3.0/lib/rails_multisite/connection_management.rb:78:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:118:in `migrate_all_from_s3'
/var/www/discourse/lib/tasks/uploads.rake:93:in `block in <main>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => uploads:migrate_from_s3
(See full trace by running task with --trace)
SiteSetting 和 GlobalSettings 已禁用。
root@ip-172-31-7-247-app:/var/www/discourse# rails c
[1] pry(main)> SiteSetting.Upload.enable_s3_uploads
=> false
[2] pry(main)> SiteSetting.enable_s3_uploads
=> false
[3] pry(main)> GlobalSetting.use_s3?
=> false
[4] pry(main)>
谢谢,但我不确定我是否真的取得了任何进展。现在我不得不处理这个新错误。