Изменение приложения Rails на производство
Как я могу изменить приложение Rails для запуска в производственном режиме? Есть конфигурационный файл, среда.rb, например,для этого?
15 ответов
как настроить и запустить приложение Rails 4 в производственном режиме (шаг за шагом) с помощью Apache и Phusion Passenger:
обычно вы могли бы войти в свой проект Rails,rails s
, и получить версию разработки вашего приложения вhttp://something.com:3000. Режим производства немного сложнее настроить.
я возился с этим некоторое время, поэтому я решил написать это для новичков (таких как я). Есть несколько маленьких твики, которые распространяются по всему интернету и подумал, что это может быть проще.
см. это руководство по настройке ядра сервера (CentOS 6, но оно должно применяться почти ко всем вкусам Linux): https://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4-app-with-apache-and-passenger-on-centos-6
убедитесь, что после настройки Passenger вы отредактировали для отражения структура директорий. вы хотите указать DocumentRoot на свой проект Rails / общую папку в любом месте
httpd.conf
файл, который имеет такой вид dir:/var/www/html/your_application/public
необходимо обновить или все будет очень расстраивает. Я не могу подчеркнуть это достаточно.перезагрузить сервер (или Apache, по крайней мере -
service httpd restart
)введите папку проекта Rails
/var/www/html/your_application
и начать миграцию сrake db:migrate
. Убедитесь, что таблица базы данных существует, даже если вы планируете добавить таблицы позже (это также часть шага 1).RAILS_ENV=production rake secret
- это создаст secret_key, который вы можете добавить вconfig/secrets.yml
. Вы can скопируйте / вставьте это в config / secrets.yml ради того, чтобы все работало, хотя я бы рекомендовал вам этого не делать. Лично я делаю этот шаг, чтобы убедиться, что все остальное работает, а затем изменить его обратно и источник позже.RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake assets:precompile
если вы обслуживаете статические активы. Это подтолкнет js, css, файлы изображений в .RAILS_ENV=production rails s
на данный момент ваше приложение должно быть доступно по адресу http://something.com/whatever
вместо :3000
. Если нет,passenger-memory-stats
и посмотреть, есть ли запись, как 908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname
я, вероятно, пропустил что-то ужасное, но это сработало для я в прошлом.
теперь это будет
rails server -e production
или, более компактный
rails s -e production
он работает для проектов rails 3+.
Если вы используете пассажира, то по умолчанию запускается в производстве, в вашем Apache conf:
<VirtualHost *:80>
ServerName application_name.rails.local
DocumentRoot "/Users/rails/application_name/public"
RailsEnv production ## This is the default
</VirtualHost>
Если вы просто запускаете локальный сервер с mongrel или webrick, вы можете сделать:
./script/server -e production
или в bash:
RAILS_ENV=production ./script/server
фактически переопределение константы RAILS_ENV в среде.rb, вероятно, должен быть вашим последним средством, так как он, вероятно, не будет оставаться установленным (см. еще один ответ Я дал на что)
Если mipadi предложение не работает, добавьте это в 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'
rails s -e production
это запустит сервер с RAILS_ENV
= 'production'
.
кроме этого, вы должны установить путь к активам в production.rb
config.serve_static_assets = true
без этого ваши активы не будут загружены.
на рельсы 3
добавлять Rails.env = ActiveSupport::StringInquirer.new('production')
в приложение.и времени rails 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
Это не лучший способ запустить rails server в рабочей среде с помощью "rails server-e production", потому что тогда rails работает как однопоточное приложение и может отвечать только на один HTTP-запрос за раз.
Лучшая статья о производственной среде для rails-это Производственные Среды-Рельсы 3
для сервера по умолчанию: rails S-e production
для порта сервера costum: rails S-p [порт] - e производство, например. рельсы S-p 3002-e производство
по умолчанию сервер работает в среде разработки:$ rails s
Если вы работаете в производственной среде:$ rails s -e production
или $ RAILS_ENV=production rails s
пожалуйста, убедитесь, что вы сделали ниже в вашей среде.файл rb.
ENV ['RAILS_ENV'] / / = 'производство'
Если приложение работает в среде общего хостинга или phushion passenger, вам может потребоваться внести изменения .httaccess (внутри общей папки) и установить режим как производство.