Qual è il modo migliore per archiviare la configurazione specifica dell'app in rotaie?

StackOverflow https://stackoverflow.com/questions/110078

  •  02-07-2019
  •  | 
  •  

Domanda

Devo archiviare la configurazione specifica dell'app in rotaie. Ma deve essere:

  • raggiungibile in qualsiasi file (modello, vista, helper e controller
  • ambiente specificato (o meno), ciò significa che ogni ambiente può sovrascrivere le configurazioni specificate in environment.rb

Ho provato a usare environment.rb e ho messo qualcosa come

USE_USER_APP = true

che ha funzionato per me ma quando si tenta di sovrascriverlo in un ambiente specifico non funzionerà perché production.rb, ad esempio, sembra essere all'interno del blocco Rails: Initializer.run.

Quindi, chiunque?

È stato utile?

Soluzione

Stavo aiutando un amico a configurare la soluzione citata da Ricardo ieri. Lo abbiamo hackerato un po 'caricando il file YAML con qualcosa di simile a questo (andando dalla memoria qui):

require 'ostruct'
require 'yaml'
require 'erb'
#config = OpenStruct.new(YAML.load_file("#{RAILS_ROOT}/config/config.yml"))
config = OpenStruct.new(YAML.load(ERB.new(File.read("#{RAILS_ROOT}/config/config.yml")).result))
env_config = config.send(RAILS_ENV)
config.common.update(env_config) unless env_config.nil?
::AppConfig = OpenStruct.new(config.common)

Questo gli ha permesso di incorporare il codice Ruby nella configurazione, come in Rhtml:

development:
  path_to_something: <%= RAILS_ROOT %>/config/something.yml

Altri suggerimenti

Guarda Configatron: http://github.com/markbates/configatron/tree/master

Devo ancora usarlo, ma lo sta attivamente sviluppando ora e sembra abbastanza carino.

La cosa più semplice da fare è impostare una variabile di classe dal tuo ambiente.rb. L'ho fatto per Google Analytics. In sostanza voglio una chiave diversa a seconda dell'ambiente in cui mi trovo, quindi lo sviluppo o la messa in scena non distorcono le metriche.

Ecco come l'ho fatto.

In lib / analytics / google_analytics.rb :

module Analytics
  class GoogleAnalytics
    @@account_id = nil

    cattr_accessor :account_id
  end
end

E poi in environment.rb o in environment / production.rb o in uno qualsiasi degli altri file di ambiente:

Analytics::GoogleAnalytics.account_id = "xxxxxxxxx"

Quindi, ovunque tu debba fare riferimento, dì il layout predefinito con JavaScript di Google Analytics, ti basta chiamare Analytics :: GoogleAnalytics.account_id .

Ho trovato un buon modo qui

Usa variabili d'ambiente. Heroku lo usa. Ricorda che se mantieni la configurazione nella base di codice, chiunque abbia accesso al codice ha accesso a qualsiasi configurazione segreta (chiavi api aws, chiavi api gateway, ecc.)

l'envdir di daemontool è un buon strumento per impostare la configurazione, sono abbastanza sicuro che è quello che Heroku usa per dare all'applicazione le sue variabili di ambiente.

Ho usato Impostazioni Rails memorizzate nella cache .

È molto semplice da usare, mantiene i valori di configurazione memorizzati nella cache e consente di modificarli dinamicamente.

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