Wyjaśnij mi jak działa config w Rails
Mam aplikację Rails 3, nazwij ją "MyApp". In my config\environments\production.plik rb widzę takie rzeczy jak
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)
Zatem pytania skupiają się na terminologii i wtf, które mają na myśli... (lub wskaż mi jakąś stronę, szukałem, ale nie znalazłem, aby wyjaśnić, jak to działa.)
- MyApp jest modułem?
- MyApp:: aplikacja jest ...? Moduł też?
- MyApp:: Aplikacja.konfiguracja jest metodą?
- config jest zmienną? Jak to widzę w konsola?
- config.logger to ???
- config./ align = "left" / log.pierwszy to A...?? --w konsoli widzę "MyApp:: Application.konfiguracja.config./ align = "left" / log.po pierwsze", ale nie wiem, co to oznacza i jak wyodrębnić informacje z niego!?!
Obejrzałem tutorial http://guides.rubyonrails.org/configuring.html ale to skacze prosto do tego, co rzeczy robią.
2 answers
Sześciostronne pytanie! O rany. ahem kręcimy.1 mam nadzieję, że dostanę 6 razy więcej głosów? :)
1. MyApp to moduł?
Tak, to moduł. Działa jako "kontener" dla wszystkich rzeczy związanych z aplikacją. Na przykład możesz zdefiniować klasę taką jak:module MyApp
class MyFunClass
def my_fun_method
end
end
end
Więc jeśli ktoś inny ma MyFunClass
, to nie będzie kolidować z Twoim MyFunClass
. To tylko miły sposób na oddzielenie się od kod.
2. MyApp:: aplikacja jest ...? Moduł też?
MyApp::Application
jest klasą, która dziedziczy po Rails::Application
. Robi to wiele rzeczy, w tym konfigurowanie obiektu Rails.application
, który jest faktycznie instancją MyApp::Application
, na której można robić różne zabawne rzeczy, takie jak składanie próśb do aplikacji(w sesji rails console
lub rails c
). Ten kod na przykład spowoduje fałszywe żądanie do ścieżki głównej aplikacji, zwracając tablicę 3-wymiarową, która jest po prostu zwykłą odpowiedzią:
Rails.application.call(Rack::MockRequest.env_for("/"))
Możesz również uzyskać trasy dla swojej aplikacji, wywołując to:
Rails.application.routes
Głównymcelem definiowania MyApp::Application
nie są te zabawne rzeczy, których prawdopodobnie nigdy nie użyjesz, ale raczej po to, aby zdefiniować konfigurację specyficzną dla aplikacji wewnątrz config/application.rb
. Takie rzeczy jak to, jakie parametry są filtrowane, Strefa czasowa aplikacji lub jakie katalogi powinny być automatycznie ładowane. Wszystkie te informacje znajdują się w podręczniku konfiguracji dla szyn .
3. MyApp:: Aplikacja.konfiguracja jest metodą?
Rzeczywiście jest to metoda, która pozwala na dodanie dodatkowych 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 zasadniczo wszystkie używają tych samych opcji, które pokazano w tym Przewodnik Konfiguracji powiązany wcześniej.
4. config jest zmienną? Jak widzisz to w konsoli?
config
"zmienna" jest w rzeczywistości metodą zdefiniowaną w kodzie używanym dla Rails::Application
i zwraca po prostu obiekt konfiguracyjny, który przechowuje konfigurację dla aplikacji.
Aby uzyskać do niego dostęp w konsoli, wystarczy użyć Rails.application.config
. Zwróci to dość duży obiekt Rails::Application::Configuration
dla przyjemności oglądania.
5. config.logger to ???
Metoda, do której się odnosisz, zakładam, pochodzi z tej linii w config/environments/production.rb
:
# Use a different logger for distributed setups
# config.logger = SyslogLogger.new
Metoda w tym przykładzie nie jest config.logger
, ale raczej config.logger=
, która jest określana jako metoda "setter" w Ruby-land. Ten bez znaku równości jest określany jako "getter". Ta metoda ustawia alternatywny logger dla środowiska produkcyjnego w Rails, do którego można uzyskać dostęp za pomocą Rails.logger
w konsoli lub samej aplikacji.
Jest to przydatne, jeśli chcesz wysłać coś do dzienników, ponieważ możesz to po prostu nazwać kod:
Rails.logger.info("DEBUG INFO GOES HERE")
6. config./ align = "left" / log.pierwszy to A...?? --w konsoli widzę "MyApp:: Application.konfiguracja.config./ align = "left" / log.po pierwsze", ale nie wiem, co to oznacza i jak wyodrębnić informacje z niego!?!
W aplikacji Rails można modyfikować lokalizacje niektórych katalogów. I tak, ta metoda config.paths
jest sposobem śledzenia miejsca, do którego te katalogi mapują. W całym moim życiu Rails nigdy nie musiałem używać ani modyfikować tej zmiennej i może to oznaczać albo jedna z dwóch rzeczy:
-
Nie jest często używany przez programistów Rails, ani]}
Nie prowadzę bardzo zróżnicowanego życia.
Zinterpretuj to tak, jak chcesz. Moim głównym celem jest to, że prawdopodobnie nigdy go nie użyjesz.
Mam nadzieję, że pomogą Ci zrozumieć Rails trochę bardziej!
1 okropny żart o kościach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-15 23:06:45
-
MyApp
jest modułem, jest to przestrzeń nazw zawierająca aplikację, którą uruchomisz, patrz następna linia -
MyApp::Application
jest klasą i uruchamiasz jej instancje podczas uruchamiania aplikacji Rails MyApp::Application.configure
jest metodą. Przekazuje wszystkie instrukcje klasie. [[21]}Zobacz Ref.config
jest metodą lub zmienną instancji (gdy jest ustawiona), która należy przez dziedziczenie doRails::Application::Configuration
. [[27]}Zobacz Ref.
Możesz to zobaczyć w konsola robi: MyApp::Application.config
config.logger
nie istnieje, dopóki go nie zdefiniujesz, więc jest to instancja Loggera. [[37]}Zobacz Ref.config.paths.log
jestRails::Paths::Path
Możesz uzyskać do niego dostęp w konsoli, używając: MyApp::Application.config.paths.log
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-15 22:58:14