Rails 3 Motore - Fornire Config per gli utenti
-
27-09-2019 - |
Domanda
Non riesco a trovare alcuna documentazione su come effettuare le seguenti operazioni:. Ho bisogno di fornire una variabile di configurazione per tutte le applicazioni che utilizzano il mio motore in modo che possano passare facilmente le impostazioni per il mio motore
Qualcuno ha qualche link ad un modo corretto o accettato di fare questo?
Modifica come aggiornamento, ho trovato un modo decente per fare questo. Codice è al di sotto.
# file: lib/my_engine.rb
module MyEngine
class Engine < Rails::Engine
initializer "my_engine.configure_rails_initialization" do |app|
# Engine configures Rails app here, this is not what my question was about
end
end
# This is what I was trying to figure out
def self.config(&block)
@@config ||= MyEngine::Configuration.new
yield @@config if block
return @@config
end
end
Questo consente a qualsiasi applicazione che utilizza il mio motore per configurarlo come qui di seguito in uno qualsiasi dei loro inizializzatori o il loro file di environment.rb, chiamando tutti i metodi definiti nella classe MyEngine::Configuration
:
MyEngine.config do |config|
config.some_configuration_option = "Whatever"
end
Soluzione
Breve risposta:
Creare un file chiamato your_engine_class.rb e messo in config / inizializzatori della vostra applicazione di hosting. Ecco un esempio di questo file.
module YourEngineClass
class Engine < Rails::Engine
config.param_name = 'value'
end
end
Poi all'interno del vostro engine.rb principale è possibile accedere a:
config.param_name
Più rispondere: ho creato un motore di stub che include questo e un sacco di altra configurazione standard è necessario, è possibile utilizzarlo come punto di partenza:
http://keithschacht.com/creating-a-rails-3-engine- plugin-gioiello /
Altri suggerimenti
Personalmente, come il modello Devise usi, che definisce un metodo di classe nel modulo del vostro motore e poi un inizializzatore nell'applicazione genitore .
Creare un metodo di classe per chiamare dall'applicazione principale
module YourEngine
class << self
attr_accessor :your_config_var
end
def self.setup(&block)
# You can yield your own object encapsulating your configuration logic/state
yield self
end
end
Chiamare il metodo di classe in un inizializzatore nell'applicazione padre
YourEngine.setup do |config|
config.your_config_var = "nyan cat"
end
Ora siete liberi di your_config_var
l'accesso nel processo di inizializzazione del motore. È possibile creare un file nella directory config/initializers
del motore o utilizzare il Rails Initializer ganci.
Mi piace questo approccio, poiché si ha più il controllo su ciò che oggetto di configurazione si espongono ai clienti e non abbiano la prevalenza metodo config
del motore.
sembra migliore per me come segue:
#lib/my_engine.rb
require 'rails'
module MyEngine
class Engine < Rails::Engine
end
def self.config(&block)
yield Engine.config if block
Engine.config
end
end