Ciao a tutti,
Come posso disattivare completamente l’archiviazione AWS S3 e riportare tutti i file e i backup presenti nell’archiviazione S3 sul mio server EC2?
Ciao a tutti,
Come posso disattivare completamente l’archiviazione AWS S3 e riportare tutti i file e i backup presenti nell’archiviazione S3 sul mio server EC2?
Credo che questo faccia al caso nostro:
./launcher enter app
rake uploads:migrate_from_s3
rake posts:rebake
Questo migra i file caricati DA S3 al tuo server web. Successivamente, puoi tornare al tuo app.yml e impostare DISCOURSE_USE_S3: false. Quindi ricostruisci.
Andrei anche nell’area di amministrazione di Discourse e toglierei la spunta da tutte le caselle che attivano la modalità S3.
Ho fatto come suggerito da @AntiMetaman, ma ricevo un errore: rake abort. In primo luogo, mi chiede di disattivare il caricamento su S3. Ho disattivato il caricamento su S3 e ho riprovato con rake, ma è apparso questo errore.
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
Questo, giusto?

Oggi mi sono imbattuto in questo argomento. Potrebbe valere la pena aspettare, se possibile.
Se disattivi S3 solo dal pannello di amministrazione, questo lo disabilita solo a livello di sito. Vuoi disabilitarlo globalmente, motivo per cui devi modificare il valore da true a false in app.yml e poi ricostruire.
Dovrebbe funzionare se hai configurato S3. Ho appena provato migrate_from_s3 e migrate_to_s3. Funziona per me. Non ho ricevuto alcun errore. Non so cosa significhi questo errore, quindi a questo punto dovrebbe intervenire uno sviluppatore di Discourse:
NoMethodError: undefined method 'downcase' for nil:NilClass
Strano, la mia risposta qui sotto è stata cancellata; quindi la pubblico di nuovo.
Quell’errore si verifica quando viene chiamato un metodo di stringa su un oggetto che è nil; generalmente accade in Ruby quando ci si aspetta un oggetto di tipo stringa, ma è nil.
È per questo motivo che si verifica quell’errore.
Ho aggiunto DISCOURSE_USE_S3: false a app.yml, ma l’errore persiste. Quale versione di Discourse stai utilizzando? Io sto usando l’ultima versione.
Anche io sono sull’ultima versione. Hai riscontrato errori durante la ricompilazione? Se sì, puoi condividerli?
No, non ho ricevuto alcun tipo di errore.
Se l’errore si verifica solo dopo il tuo comando rake, puoi pubblicare esattamente cosa hai digitato? Quando hai configurato S3 per la prima volta, non hai dovuto migrare i file su S3?
Ecco il mio file app.yml completo
## questo è il template del container Docker Discourse all-in-one, autonomo
##
## Dopo aver apportato modifiche a questo file, DEVI ricostruire
## /var/discourse/launcher rebuild app
##
## FAI *MOLTA* ATTENZIONE DURANTE LA MODIFICA!
## I FILE YAML SONO MOLTO MOLTO SENSIBILI A ERRORI DI SPAZIATURA O ALLINEAMENTO!
## visita http://www.yamllint.com/ per convalidare questo file quando necessario
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Scommenta queste due righe se desideri aggiungere Lets Encrypt (https)
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
## - "templates/cloudflare.template.yml"
## quali porte TCP/IP dovrebbe esporre questo container?
## Se desideri che Discourse condivida una porta con un altro server web come Apache o nginx,
## consulta https://meta.discourse.org/t/17247 per i dettagli
expose:
- "80:80" # http
- "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## Imposta db_shared_buffers al massimo al 25% della memoria totale.
## verrà impostato automaticamente da bootstrap in base alla RAM rilevata, oppure puoi sovrascrivere
db_shared_buffers: "128MB"
## può migliorare le prestazioni di ordinamento, ma aumenta l'uso di memoria per connessione
#db_work_mem: "40MB"
## Quale revisione Git dovrebbe utilizzare questo container? (default: tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## Quanti richieste web simultanee sono supportate? Dipende dalla memoria e dai core della CPU.
## verrà impostato automaticamente da bootstrap in base alle CPU rilevate, oppure puoi sovrascrivere
UNICORN_WORKERS: 2
## TODO: Il nome di dominio a cui risponderà questa istanza di Discourse
DISCOURSE_HOSTNAME: engineersasylum.com
## Scommenta se desideri che il container venga avviato con lo stesso
## nome host (opzione -h) specificato sopra (default "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: Elenco di email separate da virgola che diventeranno amministratori e sviluppatori
## all'iscrizione iniziale, esempio 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'praveen369gen@gmail.com'
## TODO: Il server SMTP utilizzato per validare nuovi account e inviare notifiche
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 # (opzionale, default true)
## Se hai aggiunto il template Lets Encrypt, scommenta qui sotto per ottenere un certificato SSL gratuito
LETSENCRYPT_ACCOUNT_EMAIL: praxxxxxx@gmail.com
## L'indirizzo CDN per questa istanza di Discourse (configurato per il recupero)
## vedi https://meta.discourse.org/t/14857 per i dettagli
#DISCOURSE_CDN_URL: //discourse-cdn.example.com
DISCOURSE_USE_S3: false
## Il container Docker è senza stato; tutti i dati sono archiviati in /shared
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## I plugin vanno qui
## vedi https://meta.discourse.org/t/19157 per i dettagli
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
## Qualsiasi comando personalizzato da eseguire dopo la costruzione
run:
- exec: echo "Inizio dei comandi personalizzati"
## Se desideri impostare l'indirizzo email 'From' per la tua prima registrazione, scommenta e modifica:
## Dopo aver ricevuto la prima email di iscrizione, ricommenta la riga. Deve essere eseguita solo una volta.
#- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "Fine dei comandi personalizzati"
Non ricordo esattamente, ma credo di aver migrato su S3 utilizzando rake uploads:migrate_to_s3
Non ho idea, ma ecco una discussione simile che presenta esattamente lo stesso errore che hai avuto tu:
Potresti voler verificare con un membro del team.
Ciao @Pravi
Domanda laterale:
Nel tuo post, nel tuo file ```yml``, “dici”:
DISCOURSE_SMTP_PASSWORD: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
È corretto? La password è tra virgolette doppie nel tuo yml?
Sì, è tra virgolette doppie. Non l’ho modificato dall’aggiunta avvenuta due anni fa.
Ho rimosso le virgolette doppie, quindi ricompilato di nuovo l’app. Poi ho provato di nuovo rake uploads:migrate_from_s3, ma senza successo. Stesso errore
Ciao @Pravi
Per essere sincero, sono un anti-fan di AWS e S3, quindi non li uso.
Hai considerato di esaminare il task Rake, fare reverse engineering dello script e semplicemente eseguire il task manualmente, passo dopo passo?
Non ho molta familiarità con lo script interno di Discourse e ho un po’ di timore a modificarlo. Non voglio rovinare tutto.
Puoi dirmi dove si trova il file di configurazione di Discourse? Non riesco a trovarlo da nessuna parte sul mio server. Il comando find non restituisce alcun risultato.
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#
Ciao @Pravi,
Scusa se hai frainteso.
Non ti ho chiesto di modificare quel file o alcun altro file.
Per “analizzare a ritroso” uno script, secondo me, significa studiarlo per capire come funziona e non ha nulla a che fare con la modifica del file. Significa leggerlo e comprenderlo.
Normalmente, se leggiamo e comprendiamo uno script o un file che genera un errore, possiamo capire come risolvere il problema.
Stai pubblicando messaggi di errore provenienti da un file che, a quanto pare, non hai letto.
Spero che questo ti sia d’aiuto.
Capisco il tuo punto. Proverò a farlo.
Puoi indicarmi la posizione del file ‘discourse.config’? Dove sono memorizzate le configurazioni per S3?