Frage

Ich versuche, die gleichen Schienen App zu zwei verschiedenen Orten mit verschiedenen App-Namen, verschiedenen Logos, verschiedenen Stylesheets, etc. zu implementieren.

Ich habe den Code bekam auf einem APP_NAME Basis zu arbeiten und eine HOST_NAME Variable I in Umgebungen / production.rb speichern. Jetzt muss ich es tatsächlich einsetzen, und ich brauche eine bessere Lösung als manuelles Bearbeiten der Umgebungsdatei auf der Produktionsmaschine.

Die einzige Möglichkeit, die ich sehen kann, es zu tun ist, eine neue Produktionsumgebung zu schaffen - zum Beispiel production_app2 - und definieren APP_NAME und HOST_NAME anders in ihnen. Gibt es einen besseren Weg?

War es hilfreich?

Lösung

Nein, nein, nein! Sie nicht die Umwelt-Dateien bearbeiten. Ich meine, sie bearbeiten, wie Sie für Dinge zu müssen, die die gleiche für jeden Einsatz werden müssen konfiguriert , aber nicht für Dinge, die zwischen Implementierungen sein konfigurierbar sollte .

Dazu verwenden Konfiguration.

eine YAML-Datei in config werfen, die etwa wie folgt aussieht:

development:
  :app_name: App 1
  :host_name: something.com

test:
  :app_name: App 1
  :host_name: something.com

production:
  :app_name: App 1
  :host_name: something.com

Nennen Sie es, was Sinn macht. Lassen Sie uns sagen settings.yml.

laden Sie es jetzt mit einem Initialisierer in config/initializers/settings.rb die wie folgt aussieht:

SETTINGS = YAML.load_file("#{RAILS_ROOT}/config/settings.yml")[RAILS_ENV]

Jetzt Zugriff auf Ihre Konfiguration wie folgt aus:

SETTINGS[:app_name]

(Wenn Sie nicht möchten, dass Ihre vorhandenen Code ändern, überhaupt, innerhalb config/initializers/settings.rb Linien hinzuzufügen, die Ihre vorhandenen Namen wie APP_NAME = SETTINGS[:app_name] gesetzt, etc.)

Beachten Sie, dass dies eine mögliche Implementierung von Konfigurationseinstellungen, aber auch wenn ein anderer Ansatz gewählt wird, sollte auf Deployment unabhängige Konfiguration basieren. Dies kann viel werden leichter und maintainably eingerichtet besteht zwischen Installationen und Upgrades als bei Umgebungsdateien Ausmisten.

Wieder zu rekapitulieren:

  • Umwelt-Dateien sind für die Konfiguration, die das gleiche für alle Installationen ist
  • Konfigurationsdateien sind für die Konfiguration, die zwischen Einsätzen
  • ändern

Aktualisieren

Für Capistrano basierte Implementierungen, ist es das, was ich mehrere Konfigurationsdateien in dem neuen current aus dem shared Verzeichnis Symlink verwenden (ich glaube, es kam ursprünglich von einem Ezra Rezepte von EngineYard):

after "deploy:update_code","deploy:symlink_configs"

namespace(:deploy) do  
  task :symlink_configs, :roles => :app, :except => {:no_symlink => true} do
    configs = %w{ database settings }
    configs.map! { |file| "ln -nfs #{shared_path}/config/#{file}.yml #{release_path}/config/#{file}.yml" }
    run <<-CMD
      cd #{release_path} && #{configs.join(' && ')}
    CMD
  end
end

Andere Tipps

Ich denke, das ist ein ziemlich guter Weg.

Wo wir sind wir verschiedene Umgebungen definieren (zB ‚Inszenierung‘, ‚Herstellung‘, ‚production_backup‘ - geben Sie uns eine staging.rb, production.rb, production_backup.rb, wo Sie Ihre spezifische APP_NAMEs und HOST_NAMEs definieren können) und können zu jedem von ihnen einsetzen mit Capistrano. Es funktioniert ganz gut.

Dies ist ein guter Link darauf: http://www.egtheblog.com/?p = 8

Weil Sie tatsächlich zwei verschiedene Umgebungen bereitstellen, scheint es am besten, zwei verschiedene Umwelt-Dateien zu erstellen, die jeweils mit ihren eigenen Einstellungen. Stellen Sie sicher, holen Sie beschreibende Namen für Ihre Umgebung Dateien, nicht nur production2.

Sie können auch diese Informationen in der Datenbank speichern, aber ich weiß nicht, ob Sie bereit sind, eine solche Abhängigkeit zu akzeptieren. Ich denke, eine Datenbank mit würde nur Sinn machen, wenn die Zahl der Einsätze zu groß ist leicht mit wenigen Umgebung Dateien zu verwalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top