Я начинаю новое маленькое предприятие, POC, если вы хотите, и я хочу где-то развернуть приложение Rails. Я обнаружил, что есть Героку, есть ли другие варианты?
Развертывание Ruby on Rails - Есть ли хорошая альтернатива для Heroku?
Ответ 1
Да есть
Это очень хороший пост, который я нашел по этому вопросу
http://blog.sudobits.com/2013/02/15/heroku-alternatives-for-deploying-rails-applications
Я рассмотрел варианты там один за другим, и, к моему скромному мнению, OpenShift - лучший вариант для небольшого веб-сайта, по крайней мере, для начала разработки и создания POC\Prototype
Почему это лучше?
- Это дает вам то, что Героку даст вам.
- Это дает вам локальное (постоянное) хранилище. Поэтому вам не нужно платить за S3 на Amazon или его эквиваленте. Я думаю, что в какой-то момент вы хотели бы сделать это (использовать S3), но, по крайней мере, для что вам не нужно вкладывать деньги на него.
- Кажется, что сайт работает быстрее
- Я считаю его более гибким с точки зрения контроля над тем, что происходит на машине.
Есть ли недостатки?
- Единственный недостаток, который я мог найти в Openshift, заключается в том, что кажется, что развертывание занимает гораздо больше времени, чем на Heroku, и в первый раз, когда вы обращаетесь к веб-сайту, происходит значительная задержка (но после первого раза работает быстрее - не связано к кешированию браузера, если вы считаете, что это проблема).
Возможно, раздел Gemfile в этом документе https://www.openshift.com/blogs/converting-an-existing-rails-app-to-run-on-openshift может решить эту проблему... Я попробую позже
Каковы шаги, которые мне нужно сделать для развертывания уже существующего приложения на Openshift?
Во многих местах я нашел объяснения о том, как создавать и развертывать новое приложение, но было немного сложно понять, как поместить мое уже существующее приложение в OpenShift
Вот почему я хочу объяснить, что
Предположения - Ваше приложение git уже выполнено - Его путь -/home/dev/MyApp - теперь вы находитесь под /home/dev
- Создайте учетную запись Openshift на https://www.openshift.com
- Используйте инструменты командной строки, я нашел их более информативными
- Перейдите к https://www.openshift.com/get-started
- Выполните шаги 1..3, чтобы установить и настроить инструменты командной строки.
- cd к папке приложения rails/home/dev/MyApp
- Создать новый домен приложения - Запустить:
rhc domain-create <domain name>
-
Создайте приложение в OpenShift, запустив
rhc app-create -a MyApp -t ruby-1.9 --no-git
-a устанавливает имя приложения под OpenShift - это может быть нечто совершенно отличное от вашего имени приложения rails
-t устанавливает тип приложения - я думаю, что на данный момент Ruby 1.9 является их самой высокой поддерживаемой версией
- no- git говорит не создавать git - потому что у нас уже есть один
-
Настройка вашей базы данных
-
Установите соответствующий DB-картридж для вашего приложения OpenShift, вызвав
rhc cartridge add <DB cartridge type> -a <Application Name>
Например:
rhc cartridge add mysql-5.1 -a MyApp
Он также поддерживает MongoDB и PostgreSQL
(см. здесь https://www.openshift.com/developers/technologies)
-
Измените вашу базу данных .yml на связь с базой данных OpenShift. Теперь это очень просто, поскольку OpenShift получил большую часть своей конфигурации в качестве переменных окружения, и вы можете просто использовать ее везде, где вам нужно - например:
production: adapter: mysql encoding: utf8 database: <%=ENV['OPENSHIFT_APP_NAME']%> pool: 5 host: <%=ENV['OPENSHIFT_MYSQL_DB_HOST']%> port: <%=ENV['OPENSHIFT_MYSQL_DB_PORT']%> username: <%=ENV['OPENSHIFT_MYSQL_DB_USERNAME']%> password: <%=ENV['OPENSHIFT_MYSQL_DB_PASSWORD']%> socket: <%=ENV['OPENSHIFT_MYSQL_DB_SOCKET']%>
-
-
Убедитесь, что все работает локально
- Запуск: 'bundle install'
- Run: 'rails s' - Посмотрите, что все в порядке
-
Git - Добавить репозиторий OpenShift в качестве одного из ваших удаленных репозиториев и нажать его
- Удостоверьтесь, что вся ваша работа обновлена, совершена и синхронизирована с вашим GitHub. Это может сэкономить много головных болей позже.
- Выполнить:
rhc app-show <application name>
- это покажет вам всю информацию о вашем приложении. Скопируйте git URL - Запуск:
git remote add openshift <OpenShift repo URL>
-
Возьмите все, что добавляет OpenShift, объединив
Запуск:
git merge openshift/master -s recursive -X ours
-
Зафиксируйте изменения:
git commit -am 'adding OpenShift files
- Нажмите на OpenShift:
git push openshift
Вот и все, теперь ваше приложение должно быть развернуто на OpenShift
Как открыть мой развернутый веб-сайт?
Используя команду rhc app-show <application name>
, вы можете увидеть URL своего сайта
Обычно это будет http://<application name>-<domain name>.rhcloud.com
Легко изменить его в свой домен
- Просто запустите
rhc alias add <app name> <your domain>
- Затем в вашем управлении DNS. Отредактируйте определение CNAME 'www', чтобы указать на
http://<application name>-<domain name>.rhcloud.com
Как подключиться к моей машине OpenShift?
Снова, используя rhc app-show <application name>
, вы можете увидеть адрес SSH
Просто запустите ssh <SSH address>
, чтобы подключить
Как запустить миграцию и семя автоматически после развертывания?
Одна хорошая вещь в OpenShift - это возможность добавлять пользовательские действия (action-hooks), которые запускаются на разных этапах развертывания.
Подробнее об этом можно прочитать здесь https://www.openshift.com/developers/deploying-and-building-applications
Пока я расскажу только о развертывании action-hook
- В папке вашего приложения перейдите в файл .openshift/action_hooks и создайте файл под ним
deploy
- Сделать этот файл исполняемым - Run:
chmod +x deploy
-
Поместите в него какой-то код
Например:
#!/Bin/bash
echo "Запуск развертывания"
pushd ${OPENSHIFT_REPO_DIR} > /dev/null
echo "Изменить каталог на ${OPENSHIFT_REPO_DIR} общедоступный"
cd ${OPENSHIFT_REPO_DIR}
cd public
echo "Создание софт-ссылки для ${OPENSHIFT_DATA_DIR} загружает именованные закачки"
ln -s ${OPENSHIFT_DATA_DIR} загружает закачки
echo "Выполнение пучка exec rake db: migrate RAILS_ENV = production"
bundle exec rake db: migrate RAILS_ENV = "production"
echo "Выполнение пучка exec rake db: seed RAILS_ENV = production"
bundle exec rake db: seed RAILS_ENV = "production"
popd > /dev/null
- Дальнейшее объяснение софт-ссылки - для маршрутизации необходимо найти загруженные файлы Carrierwave.
- Добавьте файл в свой git -
git add deploy
(изнутри папки, конечно) - Зафиксируйте свои изменения и нажмите на remotehift remote
Как интегрировать Carrierwave, чтобы я мог загружать файлы и сохранять на OpenShift?
Есть две точки
- Где будут сохраняться файлы? - Это легко.
- Будет ли маршрутизация знать, как загружать мои загруженные файлы?
Настройка пути сохранения:
Установите файл инициализаторов \carrierwave.rb как
CarrierWave.configure do |config|
if Rails.env.production?
config.storage = :file
config.enable_processing = true
config.root = ENV['OPENSHIFT_DATA_DIR']
config.cache_dir = config.root + 'uploads'
end
end
оставить загрузчики по своему усмотрению, что означает storage :file
и
def store_dir
"добавления/# {model.class.to_s.underscore}/{# mounted_as}/{# model.id}"
конец
Использование папки $OPENSHIFT_DATA_DIR гарантирует, что мы сможем записать файлы и остаться там.
Убедитесь, что маршрутизация найдет файлы:
Мне потребовалось некоторое время, чтобы придумать этот трюк (не слишком много, всего пару часов)
Маршрутизация Rails знает, как связывать только папки, находящиеся в папке приложения - soo, на машине OpenShift, она будет искать папку загруженных файлов (с именем uploads
в нашем случае) в ${OPENSHIFT_REPO_DIR}\общедоступной папке, где удобная ссылка, помещенная в файл Развертывание, становится удобной - она просто обманывает систему и делает ее доступной и извлекает эти файлы из папки, которая не находится в папке приложения
Я знаю, что есть много сообщений об этих проблемах и о том, как их развернуть и все, но я просто хотел внести в него некоторый порядок.
Конечно, могут быть ошибки и неточности в том, что я написал, так как я не документировал каждый шаг на пути, но только из того, что я помню, не стесняйтесь исправить меня, если я ошибаюсь в некоторых деталях.
Одним из лучших источников является документация OpenShift
Я надеюсь, что эти вещи помогут людям и сэкономит вам время и деньги.
Enjoy