执行 "bundle exec rake s3:upload_assets" 时出错 - 找不到 Gemfile 或 .bundle/ 目录

我尝试以 root 用户身份运行 \"bundle exec rake s3:upload_assets\",但出现以下错误:Could not locate Gemfile or .bundle/ directory.

我也尝试在不使用 root 用户的情况下运行,使用 \"sudo -E -u discourse bundle exec rake s3:upload_assets\",但出现以下错误:sudo: unknown user discourse\nsudo: error initializing audit plugin sudoers_audit

  • 我在以下目录中执行了这两个命令:/var/discourse
  • 这是一个常规安装,未使用 docker 或其他任何东西。

如何修复此问题以便我能够运行它?

谢谢。

您需要将其在容器内运行。

cd /var/discourse
./launcher enter app

然后运行该命令。

1 个赞

{“translation”: "[引用=“joshhabka, 第1帖, 主题: 361173”]
sudo -E -u discourse bundle exec rake s3:upload_assets
[/引用]

谢谢!这让我更进一步,现在遇到这个错误:

root@redacted:/var/www/discourse# sudo -E -u discourse bundle exec rake s3:upload_assets
/ root 不是可写的。
Bundler 会临时使用 `/tmp/bundler20250409-510203-w6snye510203` 作为你的主目录。
错误:确保在 config/discourse.conf 或环境变量中配置了 S3

我确实在 Discourse 站点设置中配置了一切。 我没有使用 Docker,所以我不需要环境变量,对吧?"}

我在 app.yml 中尝试添加环境变量,重建,然后重新进入应用并运行命令,结果如下:

`/root` 不可写。
Bundler 将暂时使用 `/tmp/bundler20250409-1393-48ek5u1393` 作为您的主目录。
正在安装 CORS 规则...
正在尝试在存储桶 biohacking-forum 中应用 ASSETS S3 CORS 规则集。
rake 中止!
Seahorse::Client::NetworkingError: 响应体为空或不完整 (Seahorse::Client::NetworkingError)
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/sse_cpk.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/dualstack.rb:21:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/accelerate.rb:43:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/checksum_algorithm.rb:169:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:16:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/invocation_id.rb:16:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/param_converter.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/seahorse/client/plugins/request_callback.rb:89:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/response_paging.rb:12:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/seahorse/client/plugins/response_target.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/telemetry.rb:39:in `block in call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/telemetry/no_op.rb:29:in `in_span'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/telemetry.rb:53:in `span_wrapper'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/telemetry.rb:39:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/seahorse/client/request.rb:72:in `send_request'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/client.rb:6359:in `get_bucket_cors'
/var/www/discourse/lib/s3_helper.rb:401:in `fetch_bucket_cors_rules'
/var/www/discourse/lib/s3_helper.rb:168:in `ensure_cors!'
/var/www/discourse/lib/s3_cors_rulesets.rb:60:in `sync'
/var/www/discourse/lib/tasks/s3.rake:183:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => s3:upload_assets => s3:ensure_cors_rules
(运行带有 --trace 参数的任务可查看完整跟踪)

还是无法弄清楚 :frowning:

您确实需要环境变量,这就是为什么在为上传配置 S3 兼容对象存储提供商中将其记录下来的原因,以及为什么错误消息会告诉您这样做。

所有 S3 变量都应移至隐藏设置,因为在设置中配置它们弊大于利。

抱歉,我忘了您没有使用 Docker。但是,是的,您仍然需要在环境变量中设置它们。我在开发环境中这样做,以便从 S3 恢复数据库。

如果您不是为开发环境执行此操作,那么您很可能犯了一个大错误。

@Eviepayne

通过执行以下操作已修复 - 存在两个错误。

首先,我通过执行以下操作修复了第二个错误:

rails c
Upload.find(386).destroy!
exit

这修复了损坏的帖子(格式错误的文本或类似内容)

然后屏幕上的红色错误是由于使用了随机子域(由 cloudflare 提供)并将其上传到该子域。我必须将文件上传到新域(包括我的连接域)

使用:

sudo -E -u discourse bundle exec rake s3:upload_assets

然后:

sudo -E -u discourse bundle exec rake uploads:migrate_to_s3

然后论坛正常加载,右键单击并在新标签页中打开图像显示它们托管在 R2 上。然后我进行了备份。

最后,我使用以下命令清理了所有内容:

sudo -E -u discourse bundle exec rake uploads:clean_up

这释放了文件的相应存储空间(请注意,在迁移之前,我仍然拥有文件(操作系统级别)和 discourse 级别的本地备份)。

现在一切都完美运行!

3 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.