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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top