2014-04-10 14 views
6

Tak więc próbuję wdrożyć moją aplikację rails w produkcji. Kiedy wchodzę na stronę, dostaję błąd 500. Kiedy idę do moich dzienników błędów pojawia się następujący błąd:szyny secret_key_base nie są rozpoznawane w produkcji

Exception RuntimeError in Rack application object (Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`) 

Używam Rails 4.1 i mój config/secrets.yml wygląda następująco:

development: 
     secret_key_base: <development key>   
    test: 
     secret_key_base: <test key> 

    # Do not keep production secrets in the repository, 
    # instead read values from the environment. 
    production: 
     secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 

Pobiegłem grabie tajemnicą, aby uzyskać klucz i umieść eksport w moim pliku bash_profile i pozyskaj go. Uruchomiłem atuty rake: prekompiluj z powodzeniem. Mimo to wciąż dostaję tego błędu. Jakieś pomysły?

Aktualizacja: próbowałem zaktualizować wyświetlony komunikat o błędzie, aby podać nieco lepsze informacje .... i komunikat nie został zaktualizowany. Następnie próbowałem dodać klucz bezpośrednio do pliku yml zamiast używać zmiennej środowiskowej i nadal nie ma kości. Jestem uruchomiony na hostmonsterze, więc nie mogę zrestartować serwera ..... ale coś mi mówi, że to musi być zrobione ...

Aktualizacja 2: Po przespaniu w nocy wydaje się, że ten problem nie jest dłużej problem. To musiało być jakieś buforowanie. Teraz mój problem polega na tym, że próbuje użyć starej konfiguracji, którą zmieniłem kilka dni temu dla mojej bazy danych. Jeśli wymyślę, jak unieważnić pamięć podręczną, opublikuję ją tutaj i oznaczy jako odpowiedź. Jeśli ktoś wie, jak to zrobić, proszę dać mi znać, a ja oznaczy go jako odpowiedź. Korzystam z HostMonster jako mojego hostingu i postępuję zgodnie z instrukcjami, które mają na swojej stronie dla hostingu mojej aplikacji rails.

Odpowiedz

5
  1. być konieczne ponowne uruchomienie serwera, ponieważ po YourAppName::Application.initialize! zwanego w config/environment.rb nie możesz zmienić swoje ustawienia.
  2. Zamówienie Twój yml markup, prawdopodobnie istnieją pewne błędy
  3. Prawdopodobnie coś złego w config/inicjalizatorów/secret_token.rb

problem nie jest z ENV pseudo-hash. secret_key_base będzie zerowe, jeśli w ENV nie ma takiego klucza.

+0

Używam Hostmonster do hostowania tej aplikacji (dzielonego hostingu) ... jak mogę zrestartować mój serwer? –

+1

Również w 4.1 nie ma config/initializers/secret_token.rb. Teraz jest tylko plik config/secrets.yml i opublikowałem go powyżej –

+1

Sprawdź ustawienia wdrażania. Prawdopodobnie musisz określić config/secrets.yml w linked_files (jak database.yml jeśli używasz capistrano) –

5

miałem ten sam problem i rozwiązać tworząc zmienną środowiskową być ładowany za każdym razem, że mogę się zalogować do serwera produkcyjnego i wykonany mini przewodnik kroki, aby skonfigurować go przez siebie w moim GIST:

https://gist.github.com/pablosalgadom/4d75f30517edc6230a67

więc używałem Rails 4.1 z Unicorn v4.8.2 i kiedy próbował wdrożyć mojej aplikacji nie uruchomi się poprawnie, a do pliku unicorn.log znalazłem ten komunikat o błędzie:

„błąd aplikacji : Brakujące secret_key_base dla środowiska "produkcji", ustaw tę wartość na config/secrets.yml (RuntimeError) "

Po krótkich badaniach odkryłem, że Rails 4.1 zmienia sposób zarządzania kluczem secret_key, więc jeśli odczytamy plik secrets.yml znajdujący się w exampleRailsProject/config/secrets.yml (trzeba wymienić „exampleRailsProject” o nazwę projektu) znajdziesz coś takiego:

# Do not keep production secrets in the repository, 
# instead read values from the environment. 
production: 
    secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 

Oznacza to, że szyny zaleca cię użyć zmiennej środowiskowej dla secret_key_base w naszym serwerze produkcyjnym, tak aby aby rozwiązać ten błąd, musisz wykonać poniższe kroki, aby utworzyć zmienną środowiskową dla systemu Linux (w moim przypadku jest to Ubuntu) na naszym serwerze produkcyjnym:

1.- W terminalu naszego serwera produkcyjnego uruchomisz następną polecenie:

$ RAILS_ENV=production rake secret 

To da duży ciąg znaków z literami i cyframi, to jest to, czego potrzebujesz, więc skopiuj to (będziemy odnosić się do tego kodu jako GENERATED_CODE).

2.1- Jeśli teraz zalogować się jako administrator, aby nasz serwer musimy znaleźć ten plik i otworzyć go: $ vi/etc/profile

Następnie udajemy się do dolnej części pliku ("Shift + G "dla kapitału G w VI)

I napiszemy naszą zmienną środowiskową za pomocą naszego GENERATED_CODE (naciśnij klawisz" i ", aby napisać w VI), pamiętaj, aby znaleźć się w nowej linii na końcu pliku:

export SECRET_KEY_BASE=GENERATED_CODE 

Po wpisaniu kodu zapisujemy zmiany i zamykamy t on file (wciskamy klawisz "ESC", a następnie wpisujemy ": x" i "ENTER", aby zapisać i wyjść w VI)

2.2 Ale jeśli zalogujemy się jako zwykły użytkownik, możemy nazwać go example_user w tym celu, my trzeba będzie znaleźć jeden z tych innych plików:

$ vi ~/.bash_profile 
$ vi ~/.bash_login 
$ vi ~/.profile 

pliki te są w kolejności ważności, co oznacza, że ​​jeśli masz pierwszy plik, to nie trzeba pisać w innych. Więc jeśli znalazłeś te 2 pliki w twoim katalogu "~/.bash_profile" i "~/.profile", będziesz musiał napisać tylko w pierwszym "~/.bash_profile", ponieważ linux odczyta tylko ten i drugi zostaną zignorowane.

Potem idziemy na końcu pliku („Shift + G” dla kapitału G w VI)

I będziemy pisać naszą zmienną środowiskową z naszej GENERATED_CODE (Naciśnij „I”, aby napisać w VI) pamiętaj, aby być w nowej linii na końcu pliku:

export SECRET_KEY_BASE=GENERATED_CODE 

po napisaniu kodu możemy zapisać zmiany i zamknąć plik (my naciskać klawisz „ESC”, a następnie wpisać „x” i "ENTER", aby zapisać i wyjść w VI)

3.-Możemy sprawdzić, czy zmienna środowiskowa jest prope rly ustawić w linux z tym poleceniem:

$ printenv | grep SECRET_KEY_BASE 

lub z:

$ echo $SECRET_KEY_BASE 

Po wykonaniu tego polecenia, jeśli wszystko poszło ok, to pokaże GENERATED_CODE że wygenerowany wcześniej. Ostatecznie po wykonaniu całej konfiguracji możesz bez problemu zainstalować aplikację Rails z Unicorn lub inną.

Teraz, po zamknięciu terminala powłoki i ponownym zalogowaniu się do serwera produkcyjnego, ta zmienna środowiskowa zostanie ustawiona i będzie gotowa do użycia.

I to jest !! Mam nadzieję, że ten mini przewodnik pomoże ci rozwiązać ten błąd.

Powiązane problemy