2011-07-15 12 views
19

Mam aplikację Rails 3, nazywam ją "MyApp". W moich config \ środowiskach \ plik production.rb widzę takie rzeczy jakWyjaśnij mi, jak działa konfiguracja w Railsach

MyApp::Application.configure do 
    config.log_level = :info 
    config.logger = Logger.new(config.paths.log.first, 'daily') 
    ...or... 
    config.logger = Logger.new(Rails.root.join("log",Rails.env + ".log"),3,20*1024*1024) 

więc pytania są koncentrując się na terminologii i wtf one oznaczają ... (lub wskaż mnie w pewnym miejscu, Szukałem ale nie znaleziono , aby wyjaśnić, jak to działa.)

  1. MyApp to moduł?
  2. MyApp :: Aplikacja to ...? Co, moduł też?
  3. MyApp :: Application.configure to metoda?
  4. config jest zmienną? Jak mogę to zobaczyć w konsoli?
  5. config.logger to ???
  6. config.paths.log.first to ...? - w konsoli widzę "MyApp :: Application.configure.config.paths.log.first", ale nie wiem, co to znaczy i jak wyodrębnić z niego informacje!?!

Czy to za dużo na jedno pytanie? :)

Spojrzałem na samouczek http://guides.rubyonrails.org/configuring.html, ale wskakuje on dokładnie w to, co robi.

Odpowiedz

41

Sześć jednostronne pytanie! O mój. Niech przetnie ahem. Mam nadzieję, że otrzymam wtedy 6 razy więcej głosów? :)

1. MyApp to moduł?

Tak, to moduł. Działa jak "pojemnik" na wszystkie rzeczy związane z twoją aplikacją.Na przykład można zdefiniować klasę tak:

module MyApp 
    class MyFunClass 
    def my_fun_method 
    end 
    end 
end 

Następnie, jeśli ktoś ma MyFunClass, to nie będzie kolidować z MyFunClass. To po prostu dobry sposób na oddzielenie kodu.

2. MyApp :: Aplikacja to ...? Co, moduł też?

MyApp::Application to tak naprawdę klasa, która dziedziczy po Rails::Application. Dzieje się tak z wieloma rzeczami, w tym z ustawieniem obiektu Rails.application, który jest w rzeczywistości instancją MyApp::Application, dzięki której można wykonywać różne czynności, na przykład wysyłać żądania do aplikacji (w sesji rails console lub rails c). Ten kod na przykład by zrobić atrapę wniosek do toru głównego aplikacji, zwracając 3-wielkości tablicy, która jest po prostu zwykły odpowiedź Rack:

Rails.application.call(Rack::MockRequest.env_for("/")) 

Można również uzyskać trasy dla aplikacji poprzez wywołanie to :

Rails.application.routes 

głównym Celem definiowania MyApp::Application nie jest takie śmieszne rzeczy, które prawdopodobnie nigdy nie używać, ale raczej tak, że można określić konfigurację specyficzne dla aplikacji wewnątrz config/application.rb. Rzeczy takie, jakie parametry są filtrowane, strefa czasowa aplikacji lub jakie katalogi powinny być automatycznie ładowane. Wszystkie są objęte w Configuration Guide for Rails.

3. MyApp :: Application.configure to metoda?

Rzeczywiście jest to metoda, która umożliwia dodanie dalszych opcji konfiguracyjnych do konfiguracji aplikacji po załadowaniu config/application.rb. Prawdopodobnie widziałeś to używane w config/environments/development.rb lub jednym z dwóch pozostałych plików w tym katalogu, ale w zasadzie wszystkie one używają tych samych opcji, co w tym pliku.

4. config jest zmienną? Jak mogę to zobaczyć w konsoli?

"Zmienna" jest w rzeczywistości metodą zdefiniowaną w kodzie użytym dla Rails::Application i zwraca po prostu obiekt konfiguracyjny, który przechowuje konfigurację dla aplikacji.

Aby uzyskać do niego dostęp w konsoli, użyj po prostu Rails.application.config. Spowoduje to zwrócenie całkiem dużego obiektu Rails::Application::Configuration dla przyjemności oglądania.

5. config.logger jest ???

Metoda masz na myśli, sądzę, pochodzi z tej linii w config/environments/production.rb:

# Use a different logger for distributed setups 
# config.logger = SyslogLogger.new 

Sposób w tym przykładzie nie config.logger, ale jest raczej config.logger=, który jest określany jako " seter "w Ruby-land. Ten bez znaku równości jest określany jako "getter". Ta metoda ustawia alternatywny program rejestrujący dla środowiska produkcyjnego w Railsach, do którego następnie można uzyskać dostęp za pomocą Rails.logger w konsoli lub samej aplikacji.

Funkcja ta jest przydatna, jeśli chcesz wstawić coś do dzienników, jak można po prostu nazwać ten kod:

Rails.logger.info("DEBUG INFO GOES HERE") 

6. config.paths.log.first jest ... ?? --in konsoli widzę "MyApp :: Application.configure.config.paths.log.first", ale nie wiem, co to znaczy i jak wyodrębnić z niego informacje!?!

W aplikacji Rails można modyfikować lokalizacje niektórych katalogów. Tak więc ta metoda jest sposobem na śledzenie lokalizacji tych katalogów. W całym moim życiu w Railsach nigdy nie musiałem używać ani modyfikować tej zmiennej, co może oznaczać jedną z dwóch rzeczy:

  1. To nie jest często używane przez programistów Rails, lub;
  2. Nie mieszkam w bardzo różnorodnym życiu.

Interpretuj to, jak chcesz. Moim głównym celem jest to, że prawdopodobnie nigdy też nie użyjesz tego.


Mam nadzieję, że pomogą ci zrozumieć Railsy jeszcze bardziej!

Straszny żart.

+2

Świetna odpowiedź i wspaniały żart;) – apneadiving

+0

Dzięki za szczegółową odpowiedź. Mam rzeczy działające, ale stają się niespokojne i chcę wiedzieć, że więcej wtf się dzieje. Wielkie dzięki, im więcej wiem, tym lepiej to lubię. – rtfminc

+0

@rtfminc: Cieszę się, że mogę Ci pomóc! To było zabawne pytanie, na które trzeba odpowiedzieć :) –

6
  • MyApp jest modułem, to nazw w tym aplikacji będziesz uruchomić, patrz następna linia

  • MyApp::Application jest klasa i używasz to przypadki, gdy uruchomiony app Rails

  • MyApp::Application.configure to metoda. Przekazuje wszystkie instrukcje dla klasy. See Ref.

  • config to metoda lub zmienna instancji (po ustawieniu), która należy do dziedziczenia do Rails::Application::Configuration. See Ref.

Widać to w konsoli robi: MyApp::Application.config

  • config.logger nie istnieje, dopóki go nie definiują, więc jest to instancja Logger. See Ref.

  • config.paths.log jest Rails::Paths::Path

można uzyskać do niego dostęp w konsoli przy użyciu: MyApp::Application.config.paths.log