@asdasdfasf

Как правильно запустить сайт на руби и Unicorn?

Итак, дано: Сайт на рельсах, который надо перенести с одного сервера (далее: источник) на другой (далее: сервер) без доступа к исходному репозиторию. Вопрос частично обсуждался здесь Как правильно перенести живой сайт на Ruby on rail..., но тогда это было скорее теоретическое обсуждение. Теперь же пошли конкретные вопросы:
Что было сделано:
0. на VirtualBox залита убунта 14.04 LTS, поднят rvm, установлена последняя версия ruby и версия которая, использовалась на источнике. Я делал так:
<br>
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3<br>
\curl -sSL https://get.rvm.io	| bash -s stable --rails -скачиваем и устанавливаем РВМ с последней версией рельс<br>
rvm install 2.2.0 - скачиваем нужную версию<br>
gem install unicorn - пытаемся установить Unicorn<br>
bundle install - пытаемся установить сайт<br>

1. Скопирована и перенесена база на монго на новый сервер;
2. Скопирована простым копи-пастом папка с сайтом;
При переносе сайта не получается правильно запустить Unicorn, в оригинале он запускался так:
cd /path/to/repository/current && rvm use 2.2.0 && bundle exec unicorn -c /path/to/repository/current/config/unicorn.rb -D -E production

Но при этом вываливается ошибка:
Using /home/master/.rvm/gems/ruby-2.2.0
/path/to/repository/shared/bundle/ruby/2.2.0/gems/kgio-2.9.2/lib/kgio.rb:21:in `require': /path/to/repository/shared/bundle/ruby/2.2.0/gems/kgio-2.9.2/lib/kgio_ext.so: wrong ELF class: ELFCLASS64 - /path/to/repository/shared/bundle/ruby/2.2.0/gems/kgio-2.9.2/lib/kgio_ext.so (LoadError)
        from /path/to/repository/shared/bundle/ruby/2.2.0/gems/kgio-2.9.2/lib/kgio.rb:21:in `<top (required)>'
        from /path/to/repository/shared/bundle/ruby/2.2.0/gems/unicorn-4.8.3/lib/unicorn.rb:6:in `require'
        from /path/to/repository/shared/bundle/ruby/2.2.0/gems/unicorn-4.8.3/lib/unicorn.rb:6:in `<top (required)>'
        from /path/to/repository/shared/bundle/ruby/2.2.0/gems/unicorn-4.8.3/lib/unicorn/launcher.rb:9:in `require'
        from /path/to/repository/shared/bundle/ruby/2.2.0/gems/unicorn-4.8.3/lib/unicorn/launcher.rb:9:in `<top (required)>'
        from /path/to/repository/shared/bundle/ruby/2.2.0/gems/unicorn-4.8.3/bin/unicorn:3:in `require'
        from /path/to/repository/shared/bundle/ruby/2.2.0/gems/unicorn-4.8.3/bin/unicorn:3:in `<top (required)>'
        from /path/to/repository/shared/bundle/ruby/2.2.0/bin/unicorn:23:in `load'
        from /path/to/repository/shared/bundle/ruby/2.2.0/bin/unicorn:23:in `<main>'

Гугл ничего вразумительного не говорит, знаний объективно не хватает, чтобы понять, что он хочет. Внимание, вопрос: Что необходимо сделать сейчас, чтобы запустить сайт, и как правильно надо было сделать?
  • Вопрос задан
  • 1283 просмотра
Пригласить эксперта
Ответы на вопрос 2
@caution
bundle install - пытаемся установить сайт - просто кайф

надеюсь это:
'/path/to/repository/'
вы руками делали, иначе все очень плохо.
Ответ написан
2ord
@2ord
Using /home/master/.rvm/gems/ruby-2.2.0
/path/to/repository/shared/bundle/ruby/2.2.0/gems/kgio-2.9.2/lib/kgio.rb:21:in `require': /path/to/repository/shared/bundle/ruby/2.2.0/gems/kgio-2.9.2/lib/kgio_ext.so: wrong ELF class: ELFCLASS64 - /path/to/repository/shared/bundle/ruby/2.2.0/gems/kgio-2.9.2/lib/kgio_ext.so (LoadError)
        from /path/to/repository/shared/bundle/ruby/2.2.0/gems/kgio-2.9.2/lib/kgio.rb:21:in `<top (required)>'
        from /path/to/repository/shared/bundle/ruby/2.2.0/gems/unicorn-4.8.3/lib/unicorn.rb:6:in `require'
...
говорит о том, что библиотека kgio_ext.so была взята со старой машины, на которой она была скомпилирована под другую архитектуру (64 битную).
По-хорошему надо было установить, не копируя папку /path/to/repository, потому что там привязки к старой машине. Но, похоже, весь процесс миграции был сделан с левой ноги.

Порядок подготовки к установке веб-приложения должен быть таков:

  1. Ruby настоятельно рекомендуется устанавливать через штатный менеджер установок системы (apt), иначе не будут происходить обновления с устранением уязвимостей.
    Установка через rvm или rbenv с правами sudo чревата проблемами с безопасностью системы, на которой запускается сайт, поскольку версии установленных интерпретаторов фиксированы и не обновляются системой автоматически. Их нужно обновлять вручную.
    ruby 2.2.0 имеет уязвимости CVE. Если стандартной убунтовской версии 2.0 недостаточно, то можно установить версию 2.2 при помощи PPA репозитория https://www.brightbox.com/docs/ruby/ubuntu/ (глава Installation)
    sudo apt-get install ruby2.2 ruby2.2-dev ruby-switch
    sudo ruby-switch --set ruby2.2

  2. Сначала установить сам bundler (bundle)sudo gem install bundler
    bundle - утилита для разрешения зависимостей приложения, указанных в Gemfile. Читать на bundler.io/#getting-started

  3. Разные gem-зависимости приложения могут требовать компиляции из C/C++ исходников (обёртки над сторонними библиотеками). Для них должны быть установлены соответствующие "xyz-dev" .deb пакеты через штатный apt. Заранее узнать какие пакеты потребуются нельзя. Нужно проверять с bundle check в корне приложения всё ли в порядке и запускать
    bundle install --path vendor --without development test

    до тех пор, пока все зависимости не будут удовлетворены (выводится на экран чего не хватает в системе).

  4. gem unicorn также должен быть установлен. Хотя для режима разработки он совсем необязателен (есть webrick).
    Как только для bundle check показано "successful", можно запускать
    bundle exec unicorn -p $PORT -c ./config/unicorn.rb

    Пример конфигурации unicorn.rb можно взять с unicorn.bogomips.org/examples/unicorn.conf.rb

    Как правило, unicorn не выступает в роли независимого веб-сервера, а в роли бэкенда у таких серверов как nginx.

    Далее следуй инструкциям:
    https://launchschool.com/blog/setting-up-your-prod...
    https://www.digitalocean.com/community/tutorials/h...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы