Zastanawiałem się, jak dodać niestandardowe zmienne konfiguracyjne do aplikacji railsowej i jak uzyskać do nich dostęp w kontrolerze, np. Chcę zdefiniować katalog upload_directory w plikach konfiguracyjnych, powiedz develop.rb i mieć do niego dostęp w jednym z moich kontrolery.
Po drugie, planowałem mieć wsparcie S3 dla przesyłania w mojej aplikacji, jeśli chciałbym dodać plik yaml z dostępem s3, tajnym kluczem, jak zainicjować go w mojej aplikacji Rails i jak uzyskać dostęp do wartości, które zdefiniowałem w tym pliku konfiguracyjnym.
Odpowiedzi:
Aktualizacja 1
Bardzo zalecane: Idę teraz z klejnotem Rails Config, aby zapewnić precyzyjną kontrolę, jaką zapewnia.
Aktualizacja 2
Jeśli chcesz szybkiego rozwiązania, sprawdź odpowiedź Jacka Pratta poniżej.
Chociaż moja pierwotna odpowiedź poniżej nadal działa, ta odpowiedź jest obecnie nieaktualna. Polecam przejrzenie aktualizacji 1 i 2.
Oryginalna odpowiedź:
Aby uzyskać szybkie rozwiązanie, bardzo pomocne może być wyświetlenie ekranu „Plik konfiguracyjny YAML” przesłanego przez Ryana Batesa.
W podsumowaniu:
źródło
RAILS_ENV
zRails.env
iRAILS_ROOT
zRails.root
.W Rails 3 niestandardowe dane konfiguracyjne specyficzne dla aplikacji można umieścić w obiekcie konfiguracji aplikacji. Konfigurację można przypisać w plikach inicjujących lub plikach środowiska - powiedzmy dla danej aplikacji
MyApp
:lub
Aby odczytać ustawienie, po prostu wywołaj zmienną konfiguracyjną bez jej ustawiania:
AKTUALIZACJA Szyny 4
W Rails 4 jest nowy sposób na to => http://guides.rubyonrails.org/configuring.html#custom-configuration
źródło
config/environments/production.rb
Konfiguracja:config.whatever = false
Dostęp w dowolnym miejscu:Rails.configuration.whatever
undefined method
.W Railsach 3.0.5 działało dla mnie następujące podejście:
W
config/environments/development.rb
, napiszDo wartości
custom_config_key
można następnie odwoływać się z innych plików za pomocąźródło
undefined method
.method_missing': undefined method
przechowuj dla # <Rails :: Aplikacja :: Konfiguracja: 0x007f9f735b7240> ...”. Próbowałem dodać zmienną konfiguracyjną „config.store.works”.store
to jest. Aby użyć metody z tej odpowiedzi, możesz albo zmienić nazwę swojej zmiennejstore_works
, albo utworzyćconfig.store
blok zeworks
zdefiniowaną w niej zmienną .Działa to w szynach 3.1:
w config / environment.rb (lub w config / environment / .., aby wybrać określone środowisko):
Będzie to dostępne w kontrolerze lub widokach takich jak ten:
(Twoja aplikacja powinna zostać zastąpiona nazwą aplikacji).
Uwaga : To jest kod Ruby, więc jeśli masz dużo kluczy konfiguracji, możesz to zrobić:
w config / environment.rb:
źródło
W szynach 4
Zakładając, że umieścisz zmienne niestandardowe w pliku yaml:
Utwórz inicjator, aby je załadować:
Teraz w dowolnym miejscu aplikacji możesz uzyskać dostęp do tych wartości:
Jest to wygodne,
Rails.application.config_for :acme
aby załadowaćacme.yml
i korzystać z odpowiedniego środowiska.źródło
Ponieważ Rails 4.2, bez dodatkowych klejnotów, możesz załadować config / hi.yml po prostu używając
Rails.application.config_for :hi
.Na przykład:
touch config/passwords.yml
touch config/initializers/constants.rb
a teraz możesz używać
AUTHENTICATION
stałej wszędzie w swojej aplikacji:następnie dodać passwords.yml do .gitignore :
echo /config/passwords.yml >> .gitignore
utwórz plik Przykład Dla Państwa komfortucp /config/passwords.yml /config/passwords.example.yml
i potem po prostu zmienić swój przykładowy plik w konsoli produkcyjnej z rzeczywistych wartości produkcji.źródło
Chciałem tylko zaktualizować to, aby uzyskać najnowsze fajne rzeczy w Rails 4.2, teraz możesz to zrobić w dowolnym ze swoich
config/**/*.rb
plików:... a będzie to dostępne w Twojej aplikacji jako:
Zobacz więcej tutaj: http://guides.rubyonrails.org/configuring.html#custom-configuration
źródło
Sprawdź ten zgrabny klejnot, robiąc dokładnie to: https://github.com/mislav/choices
W ten sposób Twoje wrażliwe dane nie zostaną ujawnione w projektach open source
źródło
Stworzyłem prostą wtyczkę do ustawień YAML: Yettings
Działa w podobny sposób jak kod w odpowiedzi khelll, ale wystarczy dodać ten plik konfiguracyjny YAML:
Wtyczka dynamicznie tworzy klasę, która pozwala na dostęp do ustawień YML jako metod klas w Twojej aplikacji, takich jak:
Ponadto, jeśli chcesz użyć wielu plików ustawień o unikalnych nazwach, możesz umieścić je w podkatalogu w aplikacji / config w następujący sposób:
Następnie możesz uzyskać dostęp do takich wartości:
Zapewnia również domyślne ustawienia, które można zastąpić w zależności od środowiska. Możesz także użyć erb w pliku yml.
źródło
Naprawdę podoba mi się klejnot settingslogic . Bardzo łatwy w konfiguracji i obsłudze.
https://github.com/binarylogic/settingslogic
źródło
Jeśli używasz Heroku lub w inny sposób musisz zachować ustawienia aplikacji jako zmienne środowiskowe, klejnot figaro jest bardzo pomocny.
źródło
Lubię używać ustawień szyn do globalnych wartości konfiguracyjnych, które muszą być zmieniane przez interfejs WWW.
źródło
Coś, co zaczynamy robić w pracy to uporządkowany skrót ActiveSupport
Co pozwala ci czysto zdefiniować konfigurację w plikach środowiska np
źródło
Sugeruję dobre podejście, jak w ogóle poradzić sobie z konfiguracją w twojej aplikacji. Istnieją trzy podstawowe zasady:
Aby uzyskać bardziej szczegółowy przegląd, skorzystaj z tego łącza: Konfiguracja szyn we właściwy sposób
źródło