Jak mogę zmienić aplikację Rails, aby działała w trybie produkcyjnym? Czy istnieje plik konfiguracyjny, na przykład environment.rb, aby to zrobić?
Jak mogę zmienić aplikację Rails, aby działała w trybie produkcyjnym? Czy istnieje plik konfiguracyjny, na przykład environment.rb, aby to zrobić?
Odpowiedzi:
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 s
i 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.
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
Upewnij się, że po skonfigurowaniu programu Passenger dokonałeś edycji /etc/httpd/conf/httpd.conf
pliku, aby odzwierciedlić strukturę katalogu. Chcesz skierować DocumentRoot do swojego projektu / folderu publicznego w Railsach Dowolne miejsce w httpd.conf
pliku, w którym znajduje się ten katalog : /var/www/html/your_application/public
wymaga aktualizacji lub wszystko stanie się bardzo frustrujące. Nie mogę tego wystarczająco podkreślić.
Uruchom ponownie serwer (lub przynajmniej Apache - service httpd restart
)
Wprowadź folder projektu Rails /var/www/html/your_application
i 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).
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.
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake assets:precompile
jeśli obsługujesz zasoby statyczne. Spowoduje to wypchnięcie plików js, css, obrazów do /public
folderu.
RAILS_ENV=production rails s
W tym momencie Twoja aplikacja powinna być dostępna pod adresem http://something.com/whatever
zamiast :3000
. Jeśli nie, passenger-memory-stats
i 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.
To byłoby teraz
rails server -e production
Lub bardziej kompaktowy
rails s -e production
Działa dla projektów szyn 3+.
rails s -e production
server -e production
na nich biegać ?
production
niezmiennie jest to ustawienie domyślne.
echo "export RAILS_ENV=production" >> ~/.bash_profile
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)
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'
ENV['RAILS_ENV'] ||= 'production'
można je również zastosować?
Zmień zmienną środowiskową RAILS_ENV
na production
.
~/.bashrc
lub ~/.bash_profile
po prostuexport RAILS_ENV=production"
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.
W szynach 3
Dodanie Rails.env = ActiveSupport::StringInquirer.new('production')
do application.rb i rails s
bę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
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
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
Domyślnie serwer działa w środowisku programistycznym: $ rails s
Jeśli pracujesz w środowisku produkcyjnym: $ rails s -e production
lub$ RAILS_ENV=production rails s
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.