Учебник по развертыванию приложений Rails 3.1

Я ищу хороший учебник по развертыванию для приложения Rails 3.1.1 на сервере. И по добру я на самом деле подразумеваю полное. Причина, по которой я задаю этот вопрос, заключается в том, что, хотя в Интернете есть множество учебных пособий (google, блоги, книги, другие вопросы о stackoverflow и т.д.), Все они, похоже, сосредоточены либо на проблеме с процессом развертывания или сделать некоторые предположения относительно среды развертывания, которые не соответствуют тем, что мне нужно.

Я понимаю, что развертывание приложения Rails на сервере требует разнообразных программ и инструментов, которые необходимо настроить, и почему-то я всегда застрял на явно "маленьких" вещах, которые меня очень расстраивают.

Итак, начнем с самого начала. Теперь у меня есть сервер, к которому я могу получить доступ через SSH и имя домена, позвонив ему www.example.com. Сервер запускает новый Ubuntu 10.04 x64 и имеет только пользовательский интерфейс, а именно root (через root я обращаюсь к серверу с SSH). Заметка! Нет Apache, Ruby, PHP, MySQL, cPanel или любой другой панели, только минимальный минимум, который поставляется с новой установкой.

Также веб-сервер будет размещать одно приложение, и база данных будет работать на том же компьютере.

Насколько мне известно, процесс развертывания приложения Rails выполняется в следующих сценариях:

  • Установка Ruby

Я уже делал это, используя RVM, используя процесс установки нескольких пользователей (просто потому, что у меня есть только пользователь root, и он делает это автоматически). Кажется, это работает нормально, но у меня есть несколько вопросов:

Было бы разумнее установить Ruby напрямую, а не через RVM (я думаю, возможно, с точки зрения эффективности), также RVM делает немного волшебства за теми изменениями, которые изменяют некоторые файлы bash_profile способами, которые я не понимаю и это как-то кажется инвазивным...)?

Будет ли более целесообразно устанавливать как отдельный пользователь через RVM (могут ли возникнуть какие-либо проблемы безопасности)?

  • Необходимые драгоценные камни

Теперь, когда Ruby установлен, что будет лучшим исходным набором камней для установки рядом?

Я установил только связку, так что, как только я загружу свое приложение на сервер, я могу запустить команду установки пакета, которая будет устанавливать в свою очередь необходимые драгоценности приложения.

Вопрос. Должен ли я установить драгоценный камень перед собой? Существуют ли какие-либо другие драгоценные камни, которые необходимо установить?

  • Веб-сервер

Здесь мне становится сложно. Я пытаюсь использовать apache и mod-пассажир для развертывания (они кажутся самыми популярными). Поэтому я установил веб-сервер Apache и жемчуг пассажиров и все связанные с ним зависимости (библиотеки, упомянутые пассажиром).

Теперь возникают проблемы. Первое, что связано с пользователем. Как работает Apache? Я имею в виду под каждым пользователем? Если я установил его и (повторно) запустил его с помощью пользователя root, он будет постоянно выполняться под пользователем root? Это плохая вещь? Если да, должен ли я создать другого пользователя? Если да, то как? В каких группах я должен вводить нового пользователя, какие у него права (а именно, какие папки он должен иметь). Как запустить apache в этом случае (под root, под этим пользователем, добавить строку где-нибудь в файле конфигурации и т.д.)

  • Конфигурация веб-сайта

Где разместить материал конфигурации веб-сайта? Можно ли положить его в apache.conf или создать новый файл на доступных сайтах? Или я должен просто повторно использовать файл по умолчанию, который уже присутствует там? Если новый пользователь был создан на предыдущем шаге, какие права он должен иметь в отношении файлов конфигурации?

Также... где, в конце концов, поставить приложение rails? В какой папке было бы лучше? Где-то под домом? Может быть, под /var/www? Я хочу знать, как это повлияет на права apache-процесса, обслуживающего приложение? (Как правило, у меня возникают проблемы при обслуживании приложения, он жалуется, что он не имеет прав на конкретную папку. Кроме того, с использованием новых конвейеров ресурсов, которые я не совсем понимаю, создаются файлы активов, и они, похоже, не наследуйте права родительских папок...)

  • База данных

В качестве базы данных я использую MySQL, и ее установка довольно проста. Вопрос, который у меня здесь, снова связан с пользователем. Должен ли я использовать специальный пользователь для базы данных? Как MySQL фактически управляет пользователями (они являются внутренними, или они являются пользователями Linux или...?). Должен ли пользователь базы данных быть таким же, как "веб-пользователь" сверху? Или это должно быть другое?

  • Активы

Здесь я действительно теряюсь. У меня действительно есть проблемы, связанные с созданием трубопроводов активов. Я проверил эпизод railscasts, а также учебник по сайту rails, и я действительно теоретически понимаю это, но на практике у меня проблемы.

Итак, вопросы здесь будут: какие команды я должен выполнить для предварительной компиляции активов? (Попытка запускать рейк-активы: прекомпиляция). Это нормально? Что я должен изменить в файле production.rb? Как созданные активы работают в отношении пользователей веб-пользователей или баз данных, созданных выше? Я лично получаю проблему на этом этапе, а именно, в файлах журналов говорится, что некоторые файлы css недоступны (например, у меня есть библиотека jqplot, установленная в папке vendor/assets, и ее файлы не могут быть доступны, - я должен добавить файл манифеста здесь как-то?).

Было бы здорово, если бы кто-то мог указать мне на хорошую статью или на ресурс, объясняющий все это. Основная область, с которой у меня возникают проблемы, - это взаимодействие Apache, Passenger, Ruby, Rails и MySQL с пользователем Linux. Как правильно настроить разрешения для папки приложений Rails? Как конвейер активов влияет на этот пользовательский материал?

Спасибо

Ответ 1

Здесь мой способ развертывания Rails:

  • Установка Ruby

Я бы не использовал RVM, потому что очень сложно заставить его работать правильно в сочетании с такими вещами, как cron jobs. Вывод (например, с обертками), но немного хлопот. Если вам не нужны другие версии Ruby на этом компьютере, просто установите его из источника самостоятельно.

  • Драгоценные камни

Просто позвольте Бэндлеру творить магию. Не забудьте установить флаги --without test development --deployment. Но я бы этого не сделал. Просто убедитесь, что у вас есть пакет.

  • Веб-сервер

Использование Passenger (с Apache или Nginx) - прекрасный и легкий выбор. Когда вы устанавливаете Apache из apt, он запускается специальным пользователем.

Apache настроен правильно на Ubuntu. Он начнется при перезагрузке.

  • Конфигурация веб-сайта

Вся конфигурация находится в /etc/apache 2. Поместите конфигурацию своего виртуального хоста в /etc/apache 2/sites-available и используйте a2ensite, чтобы включить его.

Поместите приложение в /var/www, так как это местоположение по умолчанию в Ubuntu. Обычно я использую пользователя развертывания.

Убедитесь, что пользователь может получить доступ к вашему приложению, назначив ваше приложение группе www-data.

  • База данных

У MySQL есть своя пользовательская система. Войдите как пользователь root и создайте нового пользователя с SQL: GRANT ALL ON 'application_production'.* TO 'deploy' IDENTIFIED BY 'some password';

  • Активы

Активы должны генерироваться как пользователь, владеющий приложением. Вы должны добавить любые файлы css и javascript в файл production.rb. Например:

config.assets.precompile += %w(backend.css)
  • Заключение

Это помогает использовать инструмент развертывания, например Capistrano. Когда вы запустите capify, раскомментируйте соответствующую строку в Capfile, чтобы получить компиляцию активов. Здесь моя:

ENV['RAILS_ENV'] = 'production'
load 'deploy' if respond_to?(:namespace) # cap2 differentiator
load 'deploy/assets'
load 'config/deploy'
require 'capistrano/ext/multistage'
require "bundler/capistrano"
require 'capistrano_colors'

Вот как я обычно устанавливаю свои приложения для рельсов. Надеюсь, вам это удастся. Недавно я написал драгоценный камень для интеграции Chef -соло с Capistrano, называемый capistrano-chef-solo. Это очень альфа и может быть слишком сложным, если вы только начинаете с развертывания, но это может вам помочь.