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:
- To nie jest często używane przez programistów Rails, lub;
- 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.
Świetna odpowiedź i wspaniały żart;) – apneadiving
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
@rtfminc: Cieszę się, że mogę Ci pomóc! To było zabawne pytanie, na które trzeba odpowiedzieć :) –