Devo utilizzare diverse configurazioni del fornitore di account quando l'applicazione Meteor funziona come ambiente di sviluppo, test o produzione.Come un'applicazione meteorica sa se è in esecuzione su ambiente di sviluppo, test o produzione?
risposta
Un modo davvero disordinato per raggiungere questo obiettivo nota
https://github.com/possibilities/meteor-environment-hooks
: l'interfaccia è IMHO OK, l'implementazione è disordinata
Questo è adatto solo per le situazioni più elementari e non funzionerà se si desidera testare il proprio env sul computer locale senza eseguire una distribuzione completa. –
Sì, sicuramente uno stop gap. Funziona comunque nelle situazioni di base. Lo uso per impostare l'id api in modo appropriato per il nuovo sistema di autenticazione, ma sono desideroso di sostituirlo con una soluzione migliore. –
C'è un open pull request a github che consentirebbe per questo. Commenta/Vota per questo, quindi è più probabile che venga incluso!
È possibile utilizzare Meteor.settings
accoppiato con l'opzione --settings
utilizzato durante l'esecuzione meteor run
o meteor deploy
.
Ad esempio, per l'esecuzione in modalità dev
, creare un file JSON, chiamarlo meteorConfigDev.json, e inserire il seguente in esso:
{
"public" : {
"mode" : "dev"
},
"anotherProperty" : "anotherValue"
}
Eseguire la vostra applicazione utilizzando
meteor --settings meteorConfigDev.json
On il server e sul client è possibile accedere alla "modalità" utilizzando:
Meteor.settings.public.mode //in this case it will be "dev"
Nota che set sono disponibili "public" sia sul server che sul client, mentre tutto il resto (in questo caso "anotherProperty") è disponibile solo sul server.
È quindi possibile avere diversi file di configurazione per i diversi ambienti.
Sul server:
var inDevelopment = function() {
return process.env.NODE_ENV === "development";
};
var inProduction = function() {
return process.env.NODE_ENV === "production";
};
Meteor imposta la variabile d'ambiente NODE_ENV allo "sviluppo" quando si esegue meteor
. In produzione, puoi impostare la variabile su qualsiasi cosa desideri, altrimenti verrà automaticamente impostata su "produzione".
Aggiornamento: Ho creato un pacchetto intelligente per consentire che questo funzioni sul client e sul server.
mrt add allow-env
Basta impostare le regole di autorizzazione in un file server.
allowEnv({
NODE_ENV: 1
});
Questo non funziona per me, dato che la mia app è auto-ospitata e quando lancio la mia app tramite "meteor run --production" meteora ancora process.env.NODE_ENV a "sviluppo" (non sembra ragionevole, ma hanno il loro resons - vedi link). Questo è un problema noto per anni e ad es. discusso qui: https://github.com/meteor/meteor/issues/1858. – DerWOK
"altrimenti sarà impostato su" produzione ": non dipende da dove ospiti/quali strumenti usi per l'hosting? –
Molto facile. Sto facendo funzionare la mia app su cinque (sì, cinque!) Ambienti diversi. Uso semplicemente un'istruzione switch su ROOT_URL come mostrato di seguito per quattro ambienti diversi. Certo, puoi usare un if-else se hai solo due ambienti. Funziona sul server. Basta creare un nuovo file chiamato startup.js e utilizzare l'esempio di codice seguente. Saluti!
switch (process.env.ROOT_URL) {
case "http://www.production.com/":
BLOCK OF CODE HERE
break;
case "http://www.staging.com/":
BLOCK OF CODE HERE
break;
case "http://www.development.com/":
BLOCK OF CODE HERE
break;
case "http://localhost:3000/":
BLOCK OF CODE HERE
break;
}
In generale, il formato per un'istruzione switch in JavaScript è
switch(expression) {
case n:
code block
break;
case n:
code block
break;
default:
default code block
}
UPDATE: Nota che Meteor offre ora Meteor.absoluteUrl()
, che è simile a process.env.ROOT_URL
con l'aggiunta di funzionalità extra. Vedi docs.
Ho visto diverse app infrangere a causa di codice simile Questo codice rende la tua funzionalità dipendente da un proprietà che è indipendente dall'ambiente (l'URL) .Se l'URL viene modificato, la funzionalità può interrompersi e potenzialmente nessuno se ne accorge. Inoltre, devi modificare un punto in più nel codice ora se desideri cambiare l'URL (o aggiungerne un altro uno), che potresti aver dimenticato in pochi mesi: le funzionalità che dipendono dall'ambiente sono spesso vitali per la tua app, non facili da testare in modo pulito e non così ben curate, quindi devi fare molta attenzione. – opyh
@opyh : "Come fa X sapere se gira su Y?" È una domanda che mette in discussione l'ambiente. Come sei disposto a rispondere a questa domanda senza ispezionare l'ambiente nt? Tali risposte sarebbero fuori dal campo di applicazione. Questo non ha mai rotto nella mia esperienza; quindi, sembra che tu debba trovare alcuni esempi e una soluzione migliore se sei così convinto che questo è sbagliato. –
Non ho sconsigliato di controllare il tuo 'env', ma che non dovresti dedurre il tuo ambiente da un URL, perché l'URL può cambiare indipendentemente dal tuo ambiente per vari motivi. Se il tuo collega non sa che il tuo ROOT_URL ha un extra-significato "magico" per la tua logica di app, ci sono 3 casi realistici che potrebbero interrompere la tua app in produzione: 1) rimuovi 'www.', 2) cambia 'http' a' https', 3) hanno più URL che appartengono all'app di produzione e modificano l'URL predefinito. Inoltre è contro il principio [DRY] (https://en.wikipedia.org/wiki/Don%27t_repeat_yourself). – opyh
Dal Meteor 1.3 queste bandiere lavorare fuori dalla scatola:
Meteor.isDevelopment
Meteor.isProduction
Meteor.isTest
Meteor.isAppTest
Questa deve essere la risposta accettata. –
- 1. Variabile di ambiente con webpack su sviluppo e produzione
- 2. Esecuzione di un'app meteorica su Nodejitsu
- 3. Come posso dire a Sinatra quale ambiente (sviluppo, test, produzione) è?
- 4. Symfony2: determinare se un controller è chiamato da un ambiente di sviluppo o da un ambiente di produzione
- 5. task rake in esecuzione su 'produzione' e specificando ambiente?
- 6. Rilevare se un'applicazione .NET è in esecuzione in Azure o in un ambiente non Azure
- 7. Xcode - modalità di sviluppo condizionale o produzione
- 8. Imposta la variabile d'ambiente Node.js (NODE_ENV) in iisnode su Produzione/Sviluppo/Test
- 9. Server di sviluppo per test di stress/server di produzione
- 10. In che modo Bundler sa quale ambiente usare?
- 11. Grails 3: test di integrazione vengono eseguiti in un ambiente di sviluppo, non in un ambiente di test
- 12. come eseguire angular 2 in un ambiente di produzione
- 13. ExecuteScalar restituisce null o DBNull (server di sviluppo o produzione)
- 14. Esecuzione di test di cetriolo su diversi ambienti
- 15. Esecuzione di un sito Rails: sviluppo vs produzione
- 16. Verifica se l'istanza node.js è dev o produzione
- 17. Ambiente di sviluppo anonimo
- 18. Accelera applicazione Rails su ambiente di sviluppo?
- 19. Come può il mio codice dire se è in esecuzione sul server di Google o sul mio server di sviluppo locale?
- 20. Come scoprire se il mio sistema operativo è in esecuzione su un ambiente virtualizzato o non virtualizzato?
- 21. Sviluppo basato su test vs. Sviluppo primo test
- 22. Come determinare se i test PHPUnit sono in esecuzione?
- 23. Utilizzo di node.js in un ambiente di produzione
- 24. ASP.NET 5 non è in esecuzione in modalità di sviluppo
- 25. git con rami di sviluppo, produzione e produzione
- 26. Rails: test di produzione
- 27. in esecuzione console Rails in produzione
- 28. ambiente di sviluppo non IDE
- 29. Cosa registrare/tracciare in un ambiente di produzione
- 30. Come verificare se nginx è in esecuzione o no?
facilmente raggiunto con l'aggiunta di uno switch in funzione Meteor.startup sul lato server. Vedi la mia risposta dettagliata qui sotto. – FullStack