Зміна програми Rails на виробництво


190

Як я можу змінити свою програму Rails на запуск у виробничому режимі? Чи є для цього конфігураційний файл, Environment.rb?


2
Здається, що друга відповідь має набагато більше голосів, ви б готові дати цей короткий огляд і прийняти другу відповідь, якщо у вас не виникне жодних питань. Просто допоможе майбутнім відвідувачам. Thx :)
Еволюція

Відповіді:


73

Як налаштувати та запустити додаток 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-з-apache-і-пасажир-на-centos-6

  2. Будьте впевнені, що після налаштування Пасажира ви відредагували /etc/httpd/conf/httpd.confфайл, щоб він відображав структуру вашого каталогу. Ви хочете вказати 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- це створить ключ секрету, до якого ви можете додати config/secrets.yml. Ви можете скопіювати / вставити це в config / secrets.yml для того, щоб розпочати роботу, хоча я б рекомендував цього не робити. Особисто я роблю цей крок, щоб переконатися, що все інше працює, а потім змінити його та подати джерело пізніше.

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompileякщо ви обслуговуєте статичні активи. Це підштовхне js, css, файли зображень до /publicпапки.

  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

Я, певно, пропустив щось грізне, але це працювало для мене в минулому.


2
Я відчуваю, що цю відповідь слід перенести в документацію про stackoverflow.
Whitecat

Я б додав, що якщо ви не хочете використовувати веб-контент, наприклад, apache, ви можете додати RAILS_SERVE_STATIC_FILES = 1 поруч із RAILS_ENV = виробництвом, це означатиме, що рейки будуть обслуговувати кожен файл, тому не рекомендуватимуть це реальний виробничий стан ...
3d0

351

Це було б зараз

rails server -e production

Або, більш компактний

rails s -e production

Він працює для рейок 3+ проектів.


33
або коротка версіяrails s -e production
Павло Ніколов

2
А як щодо хмарних служб, таких як Heroku? Як бігати server -e productionпо них?
Зелений

Хмарні сервіси, як правило, мають параметри для визначення середовища, але в них productionнезмінно є типовим.
Джеймс Біллінгем

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

Набагато більш бажана відповідь, цей повинен зробити це документацією на StackOverflow.
dmanexe

61

Якщо ви працюєте на пасажирському пасажирі , то за замовчуванням слід запустити виробництво у вашому апаш-конф:

<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

або в басі:

RAILS_ENV=production ./script/server

насправді переосмислення константи RAILS_ENV в enviornment.rb, мабуть, має бути вашим останнім засобом, оскільки це, ймовірно, не буде залишатися налаштованим (див. іншу відповідь, яку я дав на це)


54

Якщо пропозиція 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'

А як щодо хмарних служб, таких як Heroku? Може ENV['RAILS_ENV'] ||= 'production'бути застосовано і до них?
Зелений

Я довго редагував цей файл і забув .. дякую, що нагадав .. заощадив багато часу
Агнес

19

Змініть змінну середовища RAILS_ENVна production.


3
де розміщена змінна середовище?
BKSpurgeon

може бути розташований у ~/.bashrcабо ~/.bash_profileпростоexport RAILS_ENV=production"
Shimaa Marzouk


18

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

$ script/server -e production

12
rails s -e production

Це запустить сервер з RAILS_ENV= 'production'.

Крім цього, вам потрібно встановити шлях до активів production.rb

config.serve_static_assets = true

Без цього ваші активи не завантажуватимуться.


Вибачте ... проголосував, коли мав на меті проголосувати. Здійснено невелике редагування з метою виправлення помилок та оновлення.
tomd

7
RAILS_ENV=production rails s

АБО

rails s -e production

За умовчанням середовище - це розробка.


5

Як опублікували інші: rails server -e production

Або моя особиста фата: RAILS_ENV=production rails s


2

У рейках 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

2

Це не дуже вдалий спосіб запустити сервер рейлів у виробничому середовищі за допомогою "сервера рейлів - виробництво", оскільки тоді рейли виконуються як однопотокове додаток і можуть відповідати лише на один запит HTTP за один раз.

Найкраща стаття про виробниче середовище рейок - це виробничі середовища - рейки 3


3
Link gt ... доступний на зворотній машині, хоча: link
rosuav

1

для сервера за замовчуванням: виробництво rails s -e

для порту сервера costum: виробництво rails s -p [port] -e, напр. рейки s -p 3002 -е виробництво


1

Сервер за замовчуванням працює на середовищі розробки: $ rails s

Якщо ви працюєте на виробничому середовищі: $ rails s -e productionабо$ RAILS_ENV=production rails s


0

Переконайтеся, що ви зробили нижче у своєму файлі Environment.rb.

ENV ['RAILS_ENV'] || = 'виробництво'

Якщо ваша програма працює в середовищі спільного розміщення хостингу або пасажира, який може використовуватись, можливо, вам знадобиться внести зміни в .httaccess (всередині загальнодоступної папки) і встановити режим виробництва.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.