Измените приложение Rails на производство
Как я могу изменить приложение Rails для работы в производственном режиме? Существует ли файл конфигурации, например, environment.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 вы отредактировали
/etc/httpd/conf/httpd.conf
файл для отражения вашей структуры каталогов. Вы хотите указать DocumentRoot на вашу общую папку проекта Rails в любом местеhttpd.conf
файл с таким каталогом:/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
- это создаст секретный ключ, который вы можете добавить кconfig/secrets.yml
, Вы можете скопировать / вставить это в config / secrets.yml ради запуска, хотя я бы порекомендовал вам этого не делать. Лично я делаю этот шаг, чтобы убедиться, что все остальное работает, затем меняю его обратно и получаю позже.RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake assets:precompile
если вы обслуживаете статические активы. Это подтолкнет JS, CSS, файлы изображений в/public
папка.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
Это работает для рельсов 3+ проектов.
Если вы работаете в Passenger, то по умолчанию он запускается в рабочей среде в вашем 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 в enviornment.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'
Вы также можете передать среду в скрипт / сервер:
$ script/server -e production
rails s -e production
Это запустит сервер с RAILS_ENV
знак равно 'production'
,
Помимо этого вы должны установить путь активов в production.rb
config.serve_static_assets = true
Без этого ваши активы не будут загружены.
RAILS_ENV=production rails s
ИЛИ ЖЕ
rails s -e production
По умолчанию среда разработки.
Как и другие опубликовали: rails server -e production
Или мой личный любимый: RAILS_ENV=production
rails s
В Rails 3
Добавление Rails.env = ActiveSupport::StringInquirer.new('production')
в application.rb и rails s
будет работать так же, как 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-запрос за раз.
Лучшая статья о производственной среде для рельсов - Рабочая среда - Рельсы 3
По умолчанию сервер работает в среде разработки: $ rails s
Если вы работаете в производственной среде: $ rails s -e production
или же $ RAILS_ENV=production rails s
Для сервера по умолчанию: rails s -e production
для порта сервера costum: rails s -p [port] -e production, например. рельсы s -p 3002 -e производства
Пожалуйста, убедитесь, что вы сделали ниже в вашем файле environment.rb.
ENV ['RAILS_ENV'] || = 'производство'
Если ваше приложение работает в среде общего хостинга или в Phushion-пассажире, вам может потребоваться внести изменения в.httaccess (в общей папке) и установить режим в качестве рабочего.