Поиск:

Поиск по:

Результаты поиска по запросу «»
Найдено совпадений
По вашему запросу ничего не найдено
.
Показать еще

Запуск Ruby on Rails на хостинге

В данной статье рассмотрена установка Ruby on Rails, который используется для написания динамических веб-приложения на языке Ruby.

Ruby on Rails (ROR) – это многоуровневый программный каркас, написанный на языке программирования Ruby. Ruby on Rails предоставляет архитектурный образец Model-View-Controller (модель-представление-контроллер) для написания динамических веб-приложений, а также обеспечивает их интеграцию с веб-сервером и сервером базы данных.

В данной статье будет описываться один из способов запуска фреймворка Ruby on Rails на хостинге для тарифного плана «Профи». (На других тарифах хостинга действия идентичны) Выполнение настроек на сервере будет производиться через протокол SSH. Для установки соединения можно воспользоваться программой PUTTY и инструкциями из статьи SSH-доступ.

Установка Ruby on Rails

Авторизовавшись на сервере, мы окажемся в своем домашнем каталоге. Внутри домашнего каталога располагаются каталоги ваших сайтов, а также служебные каталоги bin, etc, log и tmp.

Существует несколько способов установки персональной версии фреймворка Ruby on Rails: из архива, скачанного с официального сайта, и с помощью менеджера пакетов RubyGems. Описание первого метода вы сможете найти на официальном сайте. Мы рассмотрим в этой статье второй способ:

gem install rails -v 4.1.0 --user-install

Где 4.1.0 - пример указания версии rails. Полный список версий. Для запуска разных версий rails требуются разные минимальные версии ruby. В описании версии это указывается в строке "REQUIRED RUBY VERSION:" в правой части страницы. У нас на хостинге используется версия ruby 1.9.3.

Дополнительные замечания

  • Часть современных модулей (gem-ов), которые требуются для работы rails-приложений, написаны на языке программирования Си, поэтому при установке этих модулей потребуется выполнить их компиляцию. По умолчанию, компиляция из исходного кода на сервере shared-хостинга запрещена. Однако, Вы можете либо скомпилировать эти модули своими силами и после разместить их в каталоге ~/.gem, либо подать заявку в техническую поддержку с просьбой предоставить возможность компилировать на сервере хостинга и уже после выполнить установку нужных модулей.

  • При сборке gem-ов своими силами стоит учитывать, что на сервере shared-хостинга используется операционная система с 64-битной архитектурой, поэтому и модули потребуется скомпилировать в 64-битном окружении.

Для запуска утилит из пакета Ruby on Rails создадим на них символьные ссылки:

ls ~/.gem/ruby/1.9.3/bin/* | xargs -i ln -s {} ~/bin/

Добавьте в переменную PATH путь до каталога ~/bin:

PATH=${PATH}:/home/uXXXXX/bin
export PATH

Вместо uXXXXX укажите пользователя, от имени которого Вы подключились к серверу по SSH. Что бы не повторять эти две команды каждый раз, добавьте их в конец файла ~/.bash_profile.

Развертывание проекта

Теперь мы можем создать пустой проект Ruby on Rails и приступить к его разработке. Рекомендуем для каждого проекта создавать каталог внутри каталога с сайтом, к которому этот проект относится:

cd ~/sitename.ru && rails new myproject --skip-bundle

Опция "--skip-bundle" нужна, потому что по умолчанию rails будет пытаться установить недостающие gem-ы в общий системный каталог, куда нет доступа на shared-хостинге. Позже мы запустим bundle install, чтобы необходимые gem-ы установились в подкаталоге нашего домашнего каталога.

Весьма вероятно, что проект на самом деле уже готов. В этом случае достаточно просто скопировать содержимое проекта в соответствующий каталог на сервере.

В обоих случаях (и если проект новый, и если он был скопирован с какого-то другого места) нам дальше необходимо установить gem-ы, от которых зависит Ваш проект. Это можно сделать автоматически при помощи bundle install.

Переходим в каталог с проектом

cd myproject

и запускаем установку нужных gem-ов с указанием каталога, куда они должны устанавливаться

bundle install --path ~/.gem

Поскольку Ruby on Rails будет работать через интерфейс FastCGI, то для включения соответствующих настроек нам необходимо создать CGI-обработчик (враппер):

touch ~/sitename.ru/cgi-bin/ror-wrapper.fcgi && chmod 755 ~/sitename.ru/cgi-bin/ror-wrapper.fcgi

Созданный файл нужно заполнить следующим текстом:

  • Для Ruby on Rails 2:
        #!/usr/bin/ruby1.9.3

        ENV['GEM_PATH'] ||= '/home/uXXXXX/.gem/ruby/1.9.3'

        ENV['RAILS_ENV'] = 'production'

        require '/home/uXXXXX/sitename.ru/myproject/config/environment'

        require 'fcgi_handler'

        RailsFCGIHandler.process!
  • Для Ruby on Rails 3:
        #!/usr/bin/ruby1.9.3

        ENV['GEM_PATH'] ||= '/home/uXXXX/.gem/ruby/1.9.3'

        ENV['RAILS_ENV'] = 'production'

        require '/home/uXXXX/sitename.ru/www/config/environment'

        class Rack::PathInfoRewriter
            def initialize(app)
                @app = app
            end

            def call(env)
                env.delete('SCRIPT_NAME')
                parts = env['REQUEST_URI'].split('?')
                env['PATH_INFO'] = parts[0]
                env['QUERY_STRING'] = parts[1].to_s
                @app.call(env)
            end
        end    

        Rack::Handler::FastCGI.run Rack::PathInfoRewriter.new(Myproject::Application)
  • Для Ruby on Rails 4:
        #!/usr/bin/ruby
        ENV['HOME'] = `/bin/bash -c "echo -n ~"`
        ENV['GEM_HOME'] = ENV['HOME'] + '/.gem/ruby/1.9.3/gems'
        ENV['GEM_PATH'] = ENV['HOME'] + '/.gem/ruby/1.9.3'
        ENV['RAILS_ENV'] = 'production'

        APP_PATH = ENV['HOME'] + '/sitename.ru/myproject'

        require_relative APP_PATH + '/config/environment'

        class Rack::PathInfoRewriter
          def initialize(app)
            @app = app
          end

          def call(env)
            env.delete('SCRIPT_NAME')
            parts = env['REQUEST_URI'].split('?')
            env['PATH_INFO'] = parts[0]
            env['QUERY_STRING'] = parts[1].to_s
            @app.call(env)
          end
        end

        Rack::Handler::FastCGI.run Rack::PathInfoRewriter.new(Myproject::Application)

здесь:

  • uXXXXX -- имя вашего пользователя на сервере хостинга. В большинстве случаев, совпадает с логином
  • myproject -- название созданного проекта
  • sitename.ru нужно заменить на имя вашего сайта.

В случае, если устанавливается Ruby on Rails 3, потребуется также закомментировать в файле ~/sitename.ru/myproject/Gemfile строку:

gem 'sqlite3-ruby', :require => 'sqlite3'

Если устанавливается Ruby on Rails 4, проверьте, что в файле ~/sitename.ru/myproject/Gemfile прописан гем 'fcgi'. Для этого нужно в произвольном месте добавить строку

gem 'fcgi'

При изменении Gemfile не забудьте снова выполнить

bundle install --path ~/.gem

Теперь необходимо сообщить веб-серверу Apache о том, что для обработки поступающих запросов должен использоваться созданный ранее враппер. Создадим файл .htaccess в каталоге sitename.ru/www и запишем в него следующее указание:

Options +FollowSymLinks +ExecCGI

RewriteEngine On

RewriteRule ^$ index.html [QSA]

RewriteRule ^([^.]+)$ $1.html [QSA]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ cgi-bin/ror-wrapper.fcgi/$1 [QSA,L]

Обратившись к сайту sitename.ru через браузер, мы должны увидеть приветственное сообщение от Ruby on Rails. И если при просмотре «Application’s environment» не произошло никаких ошибок – это означает, что все настройки выполнены правильно и можно приступать к работе над проектом.

Если сайт выдает ошибку 500, для отладки можно попробовать запустить враппер вручную из консоли

~/sitename.ru/cgi-bin/ror-wrapper.fcgi

и посмотреть, какие он выдает ошибки, либо включить error.log для данного сайта через панель управления.

Например, при установке некоторых версий, возможно появление следующей ошибки

/home/uXXXXX/.gem/ruby/1.9.3/gems/execjs-1.4.0/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

Для решения этой проблемы необходимо раскомментировать в файле Gemfile строку

gem 'therubyracer', :platforms => :ruby

или добавить ее, если она отсутствует. Затем еще раз выполнить

bundle install --path ~/.gem

Чтобы была произведена установка недостающего gem-а.

Регистрация доменов

в зонах .RU .РФ

от 200 рублей Зарегистрировать домен

SSL сертификаты

Подтверждение сайта и надежная защита

передаваемых данных

Купить сертификат

Облачные VDS

дешевле чашки кофе

Процессорных ядер: 4, Память: 4 Гб, Диск: 20 Гб SSD, Резервное копирование

от 35 р/день Заказать VDS

Все, что нужно от хостинга

Простое решение для вашего сайта

Подробнее

Хранилище данных

Храни что хочешь по смешным ценам

Почасовая оплата за размещенные данные.

Заказать хранилище