wake-up-neo.com

Wo kann ich in Rails 4 standortweite Variablen speichern?

Ich bin neu bei Rails und komme aus einem ColdFusion-Hintergrund, in dem wir globale/standortweite Variablen im Anwendungsbereich speichern würden. Dadurch bleibt die Variable in allen Ansichten oder Controllern erhalten. Hat Rails 4 eine entsprechende Funktionalität für diese Art von Dingen?

Die standortweite Variable wird normalerweise nicht häufig geändert, sodass sie in keiner Weise geschützt werden muss.

In meiner Situation möchte ich beispielsweise den Domainnamen der Website speichern. Eine zum Testen und eine für Live-Umgebungen. Localhost für Entwicklung und xxxxxx.com für die Produktion.

Irgendwelche Tipps oder Hinweise würden helfen. Ich habe dies ausgiebig gegoogelt und Lösungen scheinen viel zu kompliziert zu sein, um eine scheinbar so triviale Aufgabe zu lösen. Was ist die beste elegante Lösung für Rails 4?

23

Die einfachste, einfachste und Standardmethode ist die Verwendung des Rails.application.config-Speichers.

Rails.application.config.my_config = 'foo'

Sie können in Ihrer Umgebung eine Konfiguration zuweisen:

# application.rb
module MyApp
  class Application < Rails::Application
    config.my_config = 'foo'
  end
end

und lese es mit

Rails.application.config.my_config
# => 'foo'

Dieser Ansatz eignet sich gut für sehr einfache Anwendungen. Wenn Sie jedoch etwas Fortgeschrittenes suchen, gibt es mehrere Edelsteine.

Ich verwende derzeit SimpleConfig . Die Hauptvorteile sind:

  • konfiguration pro Umgebung. Sie können Standardkonfigurationen für die Anwendung konfigurieren und die Standardeinstellungen mit umgebungsspezifischen Konfigurationen überschreiben
  • local.rb-Datei für benutzerdefinierte Überschreibungen
  • capistrano-ähnlicher Konfigurationsstil
  • es funktioniert gut mit der dotenv gem, sehr nützlich, um zu vermeiden, dass sensible Anmeldeinformationen in Ihrem Repo gespeichert werden.
37
Simone Carletti

Dies klingt nach einem perfekten Beispiel für Konfigurationswerte, die in config/environments/production.rb und config/environments/development.rb gespeichert sind. Speichern Sie dort einfach irgendeinen Wert:

config.my_special_value = 'val'

Und greifen Sie in Ihrer Anwendung wie folgt zu:

Rails.application.config.my_special_value

Der Wert Ihrer Umgebung ist immer aktiv.

Wenn Sie nur einen „globalen“ Wert haben möchten, speichern Sie ihn in Ihrem Anwendungscontroller. Alle Ihre View-Controller werden von Ihrem App-Controller abgeleitet. Sie können also jeden Wert als Instanz oder Klassenvariable speichern:

class ApplicationController < ActionController::Base
  MY_CONSTANT_VALUE = "foo"
end

class MyViewController < ApplicationController
  def index
    raise MY_CONSTANT_VALUE.inspect
  end
end

Sie können auch einen Helfer implementieren:

# app/helpers/application_helper.rb
module ApplicationHelper
  FOO = "bar"
end

# app/controllers/foo_controller.rb
class FooController < ApplicationController
  def index
    raise FOO
  end
end
7
ckruse

Ich kann eine gute Methode zum Speichern von Variablen empfehlen. Ich benutze dies für die Produktion
Passwörter können einfacher in .env-Datei gespeichert werden http://i.stack.imgur.com/jbcAO.png
so was

#Root dir create file ".env"
PASSWORD=123456

und Passwort laden

#Somewhere in app
ENV['PASSWORD'] #=> 123456

es funktioniert, hoffe ich helfe dir

enter image description here

3
Зелёный

Sie können gem figaro verwenden.

schreibe deine Variablen in config/application.yml

HELLO: world
development:
  HELLO: developers
production:
  HELLO: users

Dann kannst du abholen

ENV["HELLO"]
2
Raj Adroit

In Rails gibt es ein Juwel namens 

gem 'dotenv-Rails'

Dadurch können wir die Variablen der Systemebene zuordnen und in der Anwendung verwenden.

Verwenden Sie einfache Schritte Erstellen Sie zunächst ein einfaches Feld auf Systemebene an einer beliebigen Stelle mit der benannten Erweiterung .env

//in application.rb        
require 'dotenv'
Dotenv.load('path-of-your-file.env')

Und starten Sie Ihre Anwendung erneut

Source Bitte den Link für die Deskription des dot env gem erhalten

0