Изменение приложения Rails на производство

Как я могу изменить приложение Rails для запуска в производственном режиме? Есть конфигурационный файл, среда.rb, например,для этого?

15 ответов


как настроить и запустить приложение Rails 4 в производственном режиме (шаг за шагом) с помощью Apache и Phusion Passenger:

обычно вы могли бы войти в свой проект Rails,rails s, и получить версию разработки вашего приложения вhttp://something.com:3000. Режим производства немного сложнее настроить.

я возился с этим некоторое время, поэтому я решил написать это для новичков (таких как я). Есть несколько маленьких твики, которые распространяются по всему интернету и подумал, что это может быть проще.

  1. см. это руководство по настройке ядра сервера (CentOS 6, но оно должно применяться почти ко всем вкусам Linux): https://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4-app-with-apache-and-passenger-on-centos-6

  2. убедитесь, что после настройки Passenger вы отредактировали для отражения структура директорий. вы хотите указать DocumentRoot на свой проект Rails / общую папку в любом месте httpd.conf файл, который имеет такой вид dir:/var/www/html/your_application/public необходимо обновить или все будет очень расстраивает. Я не могу подчеркнуть это достаточно.

  3. перезагрузить сервер (или Apache, по крайней мере - service httpd restart )

  4. введите папку проекта Rails /var/www/html/your_application и начать миграцию с rake db:migrate. Убедитесь, что таблица базы данных существует, даже если вы планируете добавить таблицы позже (это также часть шага 1).

  5. RAILS_ENV=production rake secret - это создаст secret_key, который вы можете добавить в config/secrets.yml . Вы can скопируйте / вставьте это в config / secrets.yml ради того, чтобы все работало, хотя я бы рекомендовал вам этого не делать. Лично я делаю этот шаг, чтобы убедиться, что все остальное работает, а затем изменить его обратно и источник позже.

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompile если вы обслуживаете статические активы. Это подтолкнет js, css, файлы изображений в .

  8. 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_ENV до production.


вы также можете передать среду скрипту / серверу:

$ script/server -e production

$> export RAILS_ENV=production

rails s -e production

это запустит сервер с RAILS_ENV = 'production'.

кроме этого, вы должны установить путь к активам в production.rb

config.serve_static_assets = true

без этого ваши активы не будут загружены.


RAILS_ENV=production rails s

или

rails s -e production

по умолчанию среда является developement.


как: rails server -e production

или, моя личная любовь:RAILS_ENV=production rails s


на рельсы 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 (внутри общей папки) и установить режим как производство.