Zmień aplikację Rails na produkcyjną


190

Jak mogę zmienić aplikację Rails, aby działała w trybie produkcyjnym? Czy istnieje plik konfiguracyjny, na przykład environment.rb, aby to zrobić?


2
Wygląda na to, że druga odpowiedź ma o wiele więcej głosów, czy zechciałbyś szybko ją przejrzeć i zaakceptować drugą odpowiedź, chyba że masz z tym jakiś problem. Pomoże tylko przyszłym użytkownikom. Dzięki :)
Evolve

Odpowiedzi:


73

Jak skonfigurować i uruchomić aplikację Rails 4 w trybie produkcyjnym (krok po kroku) za pomocą Apache i Phusion Passenger:

Zwykle możesz wziąć udział w projekcie Rails rails si uzyskać wersję programistyczną swojej aplikacji pod adresem http://something.com:3000 . Tryb produkcji jest nieco trudniejszy do skonfigurowania.

Przez jakiś czas się z tym bawiłem, więc pomyślałem, że napiszę to dla początkujących (takich jak ja). Istnieje kilka drobnych poprawek, które są rozpowszechniane w Internecie i uznałem, że może to być łatwiejsze.

  1. Zapoznaj się z tym przewodnikiem, aby uzyskać informacje na temat podstawowej konfiguracji serwera (CentOS 6, ale powinno ono dotyczyć prawie wszystkich wersji Linuksa): https://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4 -app-with-apache-and -senger-on-centos-6

  2. Upewnij się, że po skonfigurowaniu programu Passenger dokonałeś edycji /etc/httpd/conf/httpd.confpliku, aby odzwierciedlić strukturę katalogu. Chcesz skierować DocumentRoot do swojego projektu / folderu publicznego w Railsach Dowolne miejsce w httpd.confpliku, w którym znajduje się ten katalog : /var/www/html/your_application/publicwymaga aktualizacji lub wszystko stanie się bardzo frustrujące. Nie mogę tego wystarczająco podkreślić.

  3. Uruchom ponownie serwer (lub przynajmniej Apache - service httpd restart)

  4. Wprowadź folder projektu Rails /var/www/html/your_applicationi rozpocznij migrację za pomocą rake db:migrate. Upewnij się, że tabela bazy danych istnieje, nawet jeśli planujesz później dodać tabele (jest to również część kroku 1).

  5. RAILS_ENV=production rake secret- stworzy to tajny klucz, do którego możesz dodać config/secrets.yml. Państwo może skopiować / wkleić do config / secrets.yml przez wzgląd na coraz wszystko działa, chociaż ja polecam nie rób tego. Osobiście robię ten krok, aby upewnić się, że wszystko inne działa, a następnie zmieniam go z powrotem i pozyskuję później.

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompilejeśli obsługujesz zasoby statyczne. Spowoduje to wypchnięcie plików js, css, obrazów do /publicfolderu.

  8. RAILS_ENV=production rails s

W tym momencie Twoja aplikacja powinna być dostępna pod adresem http://something.com/whateverzamiast :3000. Jeśli nie, passenger-memory-statsi sprawdź, czy jest taki wpis908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname

Prawdopodobnie przeoczyłem coś ohydnego, ale to działało dla mnie w przeszłości.


2
Wydaje mi się, że tę odpowiedź należy przenieść do dokumentacji stosu przepływu.
Whitecat

Dodałbym, że jeśli nie chcesz używać dostarczania treści WWW jak apache, możesz dodać RAILS_SERVE_STATIC_FILES = 1 obok produkcji RAILS_ENV =, co oznacza, że ​​szyny będą obsługiwały każdy plik, więc nie polecam tego dla stan rzeczywistej produkcji ...
3d0

351

To byłoby teraz

rails server -e production

Lub bardziej kompaktowy

rails s -e production

Działa dla projektów szyn 3+.


33
lub krótka wersjarails s -e production
Pavel Nikolov

2
Co z usługami w chmurze, takimi jak Heroku? Jak server -e productionna nich biegać ?
Zielony

Usługi w chmurze zazwyczaj mają opcje określania środowiska, ale w nich productionniezmiennie jest to ustawienie domyślne.
James Billingham

2
echo "export RAILS_ENV=production" >> ~/.bash_profile
Meekohi

Bardzo preferowana odpowiedź, ta powinna znaleźć się w dokumentacji StackOverflow.
dmanexe

61

Jeśli korzystasz z Passenger , domyślnie jest uruchamiany w trybie produkcyjnym, w conf apache:

<VirtualHost *:80>
  ServerName application_name.rails.local
  DocumentRoot "/Users/rails/application_name/public"
  RailsEnv production ## This is the default
</VirtualHost>

Jeśli prowadzisz tylko lokalny serwer z kundlem lub webrick, możesz:

./script/server -e production

lub bash:

RAILS_ENV=production ./script/server

w rzeczywistości przesłanianie stałej RAILS_ENV w enviornment.rb powinno być prawdopodobnie ostatnią deską ratunku, ponieważ prawdopodobnie nie pozostanie ustawione (patrz inna odpowiedź, którą udzieliłem na ten temat)


54

Jeśli sugestia mipadi nie działa, dodaj to do config / environment.rb

# force Rails into production mode when                          
# you don't control web/app server and can't set it the proper way                  
ENV['RAILS_ENV'] ||= 'production'

Co z usługami w chmurze, takimi jak Heroku? Czy ENV['RAILS_ENV'] ||= 'production'można je również zastosować?
Zielony

I edycja tego pliku dawno temu i zapomniałem .. dzięki za przypomnienie .. zapisany dużo czasu
Agnes

19

Zmień zmienną środowiskową RAILS_ENVna production.


3
gdzie znajduje się zmienna środowiskowa?
BKSpurgeon

może znajdować się w ~/.bashrclub ~/.bash_profilepo prostuexport RAILS_ENV=production"
Shimaa Marzouk


18

Możesz także przekazać środowisko do skryptu / serwera:

$ script/server -e production

12
rails s -e production

Spowoduje to uruchomienie serwera za pomocą RAILS_ENV= 'production'.

Oprócz tego musisz ustawić ścieżkę zasobów production.rb

config.serve_static_assets = true

Bez tego Twoje zasoby nie zostaną załadowane.


Przepraszam ... głosowałem za odrzuceniem, gdy chciałem głosować. Dokonano niewielkiej edycji w celu poprawienia błędu i opinii.
tomd

7
RAILS_ENV=production rails s

LUB

rails s -e production

Domyślnie środowisko to rozwój.


5

Jak napisali inni: rails server -e production

Albo moja osobista ulubiona: RAILS_ENV=production rails s


2

W szynach 3

Dodanie Rails.env = ActiveSupport::StringInquirer.new('production')do application.rb i rails sbędzie działać tak samo jakrails server -e production

module BlacklistAdmin
  class Application < Rails::Application

    config.encoding = "utf-8"
    Rails.env = ActiveSupport::StringInquirer.new('production')

    config.filter_parameters += [:password]
  end
end

2

Nie jest to dobry sposób na uruchomienie serwera Railsowego w środowisku produkcyjnym przez „produkcję serwera Railsowego -e”, ponieważ wtedy Railsy działają jako aplikacja jednowątkowa i mogą odpowiadać tylko na jedno żądanie HTTP na raz.

Najlepszy artykuł na temat środowiska produkcyjnego dla szyn to Środowiska produkcyjne - Rails 3


3
Link rot ... dostępny na maszynie powrotnej: link
rosuav

1

dla domyślnego serwera: produkcja szyn s -e

dla portu serwera costum: szyny s -p [port] -e produkcja, np. produkcja szyn s -p 3002 -e


1

Domyślnie serwer działa w środowisku programistycznym: $ rails s

Jeśli pracujesz w środowisku produkcyjnym: $ rails s -e productionlub$ RAILS_ENV=production rails s


0

Upewnij się, że zrobiłeś poniżej w pliku environment.rb.

ENV [„RAILS_ENV”] || = „produkcja”

Jeśli aplikacja działa w środowisku hostingu współdzielonego lub pasażera phushion, może być konieczne wprowadzenie zmian w pliku .httaccess (w folderze publicznym) i ustawienie trybu jako produkcyjnego.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.