Подтвердить что ты не робот

Развертывание Ruby on Rails - Есть ли хорошая альтернатива для Heroku?

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

4b9b3361

Ответ 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