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.)

  1. MyApp jest modułem?
  2. MyApp:: aplikacja jest ...? Moduł też?
  3. MyApp:: Aplikacja.konfiguracja jest metodą?
  4. config jest zmienną? Jak to widzę w konsola?
  5. config.logger to ???
  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!?!
Czy to za dużo na jedno pytanie? :)

Obejrzałem tutorial http://guides.rubyonrails.org/configuring.html ale to skacze prosto do tego, co rzeczy robią.

Author: apneadiving, 2011-07-16

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.

 42
Author: Ryan Bigg,
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 do Rails::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 jest Rails::Paths::Path

Możesz uzyskać do niego dostęp w konsoli, używając: MyApp::Application.config.paths.log

 6
Author: apneadiving,
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