こんにちは、皆さん。
AWS S3 ストレージを完全に停止し、S3 に保存されているすべてのファイルとバックアップを EC2 サーバーに復元するには、どうすればよいでしょうか?
こんにちは、皆さん。
AWS S3 ストレージを完全に停止し、S3 に保存されているすべてのファイルとバックアップを EC2 サーバーに復元するには、どうすればよいでしょうか?
これでうまくいくと思います:
./launcher enter app
rake uploads:migrate_from_s3
rake posts:rebake
これにより、アップロードが S3 から Web サーバーへ移行されます。その後、app.yml に戻り、DISCOURSE_USE_S3: falseに変更してください。その後、再構築を行ってください。
Discourseの管理画面に移動し、S3モードを有効にするすべてのチェックボックスのチェックを外してください。
@AntiMetaman が指示した通り行いましたが、rake が中止されるエラーが発生しました。まず、S3 アップロードをオフにするよう求められました。S3 アップロードをオフにして再度 rake を実行したところ、以下のエラーが表示されました。
root@ip-172-31-7-247-app:/var/www/discourse# rake uploads:migrate_from_s3 --trace
** Invoke uploads:migrate_from_s3 (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute 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>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `execute'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:188:in `invoke'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:160:in `invoke_task'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block in top_level'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:125:in `run_with_threads'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:110:in `top_level'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:83:in `block in run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:186:in `standard_exception_handling'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:80:in `run'
bin/rake:13: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 `invoke_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/lib/bundler/friendly_errors.rb:123:in `with_friendly_errors'
/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>'
Tasks: TOP => uploads:migrate_from_s3
これですね?

今日はこのトピックを見つけました。可能であれば、もう少し待ってみる価値があるかもしれません。
管理パネルから S3 のみを無効化した場合、それはサイトレベルでのみ無効化されます。グローバルに無効化したい場合は、app.yml の値を true から false に変更し、その後ビルドし直す必要があります。
S3 の設定が完了していれば、問題なく動作するはずです。私は migrate_from_s3 と migrate_to_s3 を試しましたが、私の環境では正常に動作し、エラーは発生しませんでした。このエラーの意味がわからないため、この段階では Discourse の開発者にご支援いただく必要があります。
NoMethodError: undefined method 'downcase' for nil:NilClass
奇妙なことに、私の下の返信が削除されたので、再度投稿します。
このエラーは、nil のオブジェクトに対して文字列メソッドが呼び出されたときに発生します。一般的に、Ruby では文字列オブジェクトが期待されているが、それが nil である場合に発生します。
そのため、このエラーが発生します。
DISCOURSE_USE_S3: false を app.yml に追加しましたが、エラーは解消されません。Discourse のどのバージョンをお使いですか?私は最新バージョンを使用しています。
私も最新版を使っています。再ビルド時にエラーは出ましたか?もし出た場合は、その内容を投稿してもらえますか?
いいえ、エラーは発生していません。
エラーが rake コマンド実行後にのみ発生する場合、正確に入力したコマンドを教えてください。S3 の初期設定時、ファイルを S3 に移行する必要はありませんでしたか?
これは私の完全な app.yml です
## これはオールインワンのスタンドアロン Discourse Docker コンテナテンプレートです
##
## このファイルを変更した後、必ず再構築してください
## /var/discourse/launcher rebuild app
##
## 編集時は *非常に* 注意してください!
## YAML ファイルは、空白やアライメントのミスに非常に非常に敏感です!
## 必要に応じて http://www.yamllint.com/ を訪問してこのファイルを検証してください
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Lets Encrypt (https) を追加したい場合は、以下の 2 行のコメントアウトを外してください
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
## - "templates/cloudflare.template.yml"
## このコンテナが公開すべき TCP/IP ポートはどれですか?
## Discourse を Apache や nginx などの他の Web サーバーとポートを共有したい場合は、
## https://meta.discourse.org/t/17247 を参照してください
expose:
- "80:80" # http
- "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## db_shared_buffers を総メモリの最大 25% に設定します。
## 検出された RAM に基づいて bootstrap によって自動的に設定されますが、上書きすることもできます
db_shared_buffers: "128MB"
## ソートパフォーマンスを向上させることができますが、接続ごとのメモリ使用量が増加します
#db_work_mem: "40MB"
## このコンテナが使用する Git リビジョンはどれですか?(デフォルト: tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## 同時にサポートされる Web リクエスト数は何ですか?メモリと CPU コア数に依存します。
## 検出された CPU に基づいて bootstrap によって自動的に設定されますが、上書きすることもできます
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'
## TODO: 新しいアカウントの検証と通知の送信に使用される SMTP メールサーバー
DISCOURSE_SMTP_ADDRESS: email-smtp.us-east-1.amazonaws.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: AXXXXXXXXXXXXXXX
DISCOURSE_SMTP_PASSWORD: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (オプション、デフォルトは true)
## Lets Encrypt テンプレートを追加した場合は、以下をコメントアウトを外して無料の SSL 証明書を取得してください
LETSENCRYPT_ACCOUNT_EMAIL: praxxxxxx@gmail.com
## この Discourse インスタンスの CDN アドレス(取得するように設定)
## 詳細は https://meta.discourse.org/t/14857 を参照してください
#DISCOURSE_CDN_URL: //discourse-cdn.example.com
DISCOURSE_USE_S3: false
## Docker コンテナはステートレスです。すべてのデータは /shared に保存されます
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## プラグインはここにあります
## 詳細は https://meta.discourse.org/t/19157 を参照してください
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
- git clone https://github.com/discourse/discourse-solved.git
- git clone https://github.com/discourse/discourse-adplugin.git
- git clone https://github.com/communiteq/discourse-sitemap.git
- git clone https://github.com/discourse/discourse-whos-online.git
- git clone https://github.com/discourse/discourse-push-notifications.git
- git clone https://github.com/discourse/discourse-chat-integration.git
- git clone https://github.com/davidtaylorhq/discourse-telegram-notifications.git
- git clone https://github.com/discourse/discourse-knowledge-explorer.git
- git clone https://github.com/discourse/discourse-math.git
## ビルド後に実行する任意のカスタムコマンド
run:
- exec: echo "Beginning of custom commands"
## 最初の登録の 'From' メールアドレスを設定したい場合は、以下のコメントを外して変更してください
## 最初のサインアップメールを取得した後、再度コメントアウトしてください。一度だけ実行すれば十分です
#- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "End of custom commands"
正確には覚えていませんが、rake uploads:migrate_to_s3 を使用して S3 へ移行したと思います
私もよくわかりませんが、あなたと同じエラーが発生しているスレッドがあります。
チームメンバーに確認することをお勧めします。
こんにちは @Pravi さん
サイドバーに関する質問です:
あなたの yml の投稿では、以下のように「記載」されていますね:
DISCOURSE_SMTP_PASSWORD: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
これは正しいですか? yml ファイル内のパスワードは二重引用符で囲まれていますか?
はい、ダブルクォートで囲まれています。2年前に追加してから変更していません。
ダブルクォートを削除して、アプリを再度ビルドしました。その後、再度 rake uploads:migrate_from_s3 を実行しましたが、依然として解決しません。同じエラーが発生します。
こんにちは @Pravi さん
正直なところ、私は AWS や S3 のアンチファンなので、それらを使っていません。
Rake タスクを見て、そのスクリプトをリバースエンジニアリングし、タスクをステップバイステップで手動で実行することを検討されましたか?
Discourse の内部スクリプトについてはあまり詳しくなく、スクリプトを編集することに少し怖さを感じています。すべてを壊したくないのです。
Discourse の設定ファイルの場所を教えてください。サーバー上でどこにも見つけることができません。find コマンドを実行しても何も返ってきません。
root@ip-172-31-7-247:/var/discourse# find . -name "*.config"
root@ip-172-31-7-247:/var/discourse# find . -name "*.conf"
./shared/standalone/letsencrypt/engineersasylum.com/engineersasylum.com.conf
./shared/standalone/letsencrypt/engineersasylum.com/engineersasylum.com.csr.conf
./shared/standalone/letsencrypt/engineersasylum.com_ecc/engineersasylum.com.conf
./shared/standalone/letsencrypt/engineersasylum.com_ecc/engineersasylum.com.csr.conf
./shared/standalone/letsencrypt/ca/acme-v01.api.letsencrypt.org/ca.conf
./shared/standalone/letsencrypt/ca/acme-v02.api.letsencrypt.org/ca.conf
./shared/standalone/letsencrypt/account.conf
./shared/standalone/postgres_data/pg_hba.conf
./shared/standalone/postgres_data/postgresql.auto.conf
./shared/standalone/postgres_data/pg_ident.conf
./shared/standalone/postgres_data/postgresql.conf
root@ip-172-31-7-247:/var/discourse#
@Pravi さん、こんにちは。
私の意図を誤解されてしまったようで、申し訳ありません。
あのファイルや他のファイルを編集するように頼んだわけではありません。
私の考えでは、スクリプトを「リバースエンジニアリングする」とは、その仕組みを理解するために研究し、ファイルを編集することとは無関係です。つまり、読んで理解することです。
通常、エラーを返すスクリプトやファイルを読んで理解すれば、問題を解決する方法を把握できるはずです。
あなたは、おそらく読んでいないファイルからのエラーメッセージを投稿されているようです。
これが役立つことを願っています。
ご指摘の点は理解しました。試してみます。
‘discourse.config’ ファイルの場所をご教示いただけますか?S3 の設定はどこに保存されていますか?