Як я можу змінити свою програму Rails на запуск у виробничому режимі? Чи є для цього конфігураційний файл, Environment.rb?
Як я можу змінити свою програму Rails на запуск у виробничому режимі? Чи є для цього конфігураційний файл, Environment.rb?
Відповіді:
Як налаштувати та запустити додаток 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-з-apache-і-пасажир-на-centos-6
Будьте впевнені, що після налаштування Пасажира ви відредагували /etc/httpd/conf/httpd.conf
файл, щоб він відображав структуру вашого каталогу. Ви хочете вказати 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
- це створить ключ секрету, до якого ви можете додати 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+ проектів.
rails s -e production
server -e production
по них?
production
незмінно є типовим.
echo "export RAILS_ENV=production" >> ~/.bash_profile
Якщо ви працюєте на пасажирському пасажирі , то за замовчуванням слід запустити виробництво у вашому апаш-конф:
<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, мабуть, має бути вашим останнім засобом, оскільки це, ймовірно, не буде залишатися налаштованим (див. іншу відповідь, яку я дав на це)
Якщо пропозиція 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'
ENV['RAILS_ENV'] ||= 'production'
бути застосовано і до них?
Змініть змінну середовища RAILS_ENV
на production
.
~/.bashrc
або ~/.bash_profile
простоexport RAILS_ENV=production"
$> export RAILS_ENV=production
rails s -e production
Це запустить сервер з RAILS_ENV
= 'production'
.
Крім цього, вам потрібно встановити шлях до активів production.rb
config.serve_static_assets = true
Без цього ваші активи не завантажуватимуться.
У рейках 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
Це не дуже вдалий спосіб запустити сервер рейлів у виробничому середовищі за допомогою "сервера рейлів - виробництво", оскільки тоді рейли виконуються як однопотокове додаток і можуть відповідати лише на один запит HTTP за один раз.
Найкраща стаття про виробниче середовище рейок - це виробничі середовища - рейки 3
для сервера за замовчуванням: виробництво rails s -e
для порту сервера costum: виробництво rails s -p [port] -e, напр. рейки s -p 3002 -е виробництво
Сервер за замовчуванням працює на середовищі розробки: $ rails s
Якщо ви працюєте на виробничому середовищі: $ rails s -e production
або$ RAILS_ENV=production rails s
Переконайтеся, що ви зробили нижче у своєму файлі Environment.rb.
ENV ['RAILS_ENV'] || = 'виробництво'
Якщо ваша програма працює в середовищі спільного розміщення хостингу або пасажира, який може використовуватись, можливо, вам знадобиться внести зміни в .httaccess (всередині загальнодоступної папки) і встановити режим виробництва.