Rotaie 4:Ambiente di sviluppo Capistrano invece che di produzione?
-
21-12-2019 - |
Domanda
Sto distribuendo l'ambiente di produzione della mia applicazione Ruby on Rails con la gemma Capistrano su un server privato virtuale.Eseguo il seguente comando per distribuire:
bundle exec cap production deploy
Tutto sembra funzionare bene, a meno che non provo a verificare in quale ambiente opera la mia attuale versione di produzione.
Un modo che utilizzo per verificarlo è eseguire:
rails console
Rails.env
La risposta che ricevo è "sviluppo", il che è abbastanza spaventoso.
Durante un altro test:quando eseguo quanto segue nella mia versione attuale:
rails db
Ricevo un errore che indica che mydatabase_development non è stato creato.
La mia applicazione sembra funzionare bene, ma non so se ciò causerà grossi problemi in futuro.Prima di tutto:Esiste un modo per determinare se la mia Live Copy è effettivamente in fase di sviluppo?In secondo luogo:Dato che ho un problema, come posso configurare Capistrano per distribuire un ambiente di produzione?
Soluzione
Tieni presente che rails console
si impegna nell'ambiente attuale come dettato da RAILS_ENV
O RACK_ENV
nel tuo ambiente.Se non lo imposti esplicitamente sul tuo server, probabilmente verrà impostato per impostazione predefinita su development
.
Un modo per risolvere questo problema è forzarlo nel tuo file .bash_profile
o qualunque profilo shell tu stia utilizzando.Per esempio:
export RAILS_ENV=production
Ciò dovrebbe renderlo disponibile e quando attivi la shell Rails si avvierà correttamente.
Come nota, non dovresti nemmeno essere in grado di avviare in modalità di sviluppo sul tuo server di produzione poiché non dovrebbe esserci una voce con quel nome in config/database.yml
.Una procedura consigliata è archiviare config/database.yml
soltanto sul server di produzione e spostalo durante la distribuzione di Capistrano.
Aggiungi questo al tuo config/deploy.rb
:
set :linked_files, %w[
config/database.yml
]
Quindi crei una configurazione solo di produzione in shared/config/database.yml
che verrà collegato in posizione durante la distribuzione.Assicurati di escludere config/database.yml
dal tuo sistema di controllo della versione in modo che non venga distribuito.
Il motivo per cui probabilmente il tuo sito è a posto è perché un launcher come Passenger si imposta automaticamente RACK_ENV
A production
se non diversamente configurato.Ciò non ha alcun impatto sulla tua shell, che per impostazione predefinita è development
.