Подготовка rails-окружения для установки Redmine используя RVM

    Для корректной работы многих rails-приложении требуются конкретные версии состовляющих компонент, таких как версия ruby, версия самого rails, а так же rake, rubygems и т.д. И скорее всего в вашем дистрибутиве Linux (в моём случае это Ubuntu 10.04 LTS Server) версии этих компонент будут отличаться. Можно пойти простым путём — поставить ruby нужной версии из исходных кодов, а всё остальное с помощьью rubygems. Но мы же хотим получить надёжный и воспроизводимый результат, а систему, при этом не превратить в свалку.

    Для решения поставленной задачи воспользуемся RVM (Ruby Version Manager). Следующий по тексту скрипт (redmine-1.2-prepare.sh) готовит rails-окружение для установки Redmine версии 1.2 с базой данных в формате sqlite. В качестве web-сервера используется apache2 + passenger. Скрипт создаёт пользователя redmine, устанавливает необходимые пакеты, устанавливает RVM в домашнюю директорию пользователя redmine и затем там же собирается rails-окружение.

    Следом за скриптом пример файла конфигурации для apache2 (redmine.conf) предложенный самим RVM по окончанию установки (от себя добавил только PassengerUser www-data, т.к. по умолчанию используется nobody).

    redmine-1.2-prepare.sh


    #!/bin/bash -e
    
    # Define common variables
    USERNAME=redmine
    RUN_WITH_USERNAME="sudo -iu $USERNAME http_proxy=$http_proxy https_proxy=$https_proxy"
    
    # Create user with $USERNAME
    id $USERNAME || sudo useradd -rm $USERNAME
    
    # Install apache2
    sudo apt-get install apache2
    
    # Install RVM and rvm reqirements
    sudo apt-get install curl
    $RUN_WITH_USERNAME bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
    # Install packages suggested by rvm-installer
    sudo apt-get install \
    	build-essential openssl libreadline6 libreadline6-dev curl \
    	git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 \
    	libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev \
    	ncurses-dev automake libtool bison subversion
    
    # Prepare environment for Redmine 1.2
    ## Define versions
    REDMINE_VERSION=1.2
    RUBY_VERSION=1.8.7
    GEM_VERSION=1.6.2
    RAKE_VERSION=0.8.7
    RACK_VERSION=1.1.3
    I18N_VERSION=0.4.2
    RAILS_VERSION=2.3.11
    ## Install packages necessary to build passenger for apache2
    sudo apt-get install libcurl4-gnutls-dev apache2-prefork-dev libapr1-dev libaprutil1-dev
    ## Prepare
    GEM_INSTALL="gem install --no-rdoc --no-ri"
    GEM_VERSION_SHORT=${GEM_VERSION//./}
    cat << EOF | $RUN_WITH_USERNAME bash -e
    	[[ -s "\$HOME/.rvm/scripts/rvm" ]] && source "\$HOME/.rvm/scripts/rvm" && \
    	rvm install $RUBY_VERSION-gems$GEM_VERSION_SHORT && \
    	rvm use $RUBY_VERSION-gems$GEM_VERSION_SHORT && \
    	rvm rubygems $GEM_VERSION && \
    	rvm gemset create redmine$REDMINE_VERSION && \
    	rvm use $RUBY_VERSION-gems$GEM_VERSION_SHORT@redmine$REDMINE_VERSION
    	## Install necessary gems
    	$GEM_INSTALL -v=$RAKE_VERSION rake && \
    	$GEM_INSTALL -v=$RACK_VERSION rack && \
    	$GEM_INSTALL -v=$I18N_VERSION i18n && \
    	$GEM_INSTALL -v=$RAILS_VERSION rails && \
    	$GEM_INSTALL sqlite3
    	## Install passenger
    	$GEM_INSTALL passenger
    	## Build passenger
    	passenger-install-apache2-module -a
    EOF
    


    redmine.conf


    <VirtualHost *:80>
    	# Passenger
    	PassengerUser www-data
    	LoadModule passenger_module /home/redmine/.rvm/gems/ruby-1.8.7-p358-gems162@redmine1.2/gems/passenger-3.0.11/ext/apache2/mod_passenger.so
    	PassengerRoot /home/redmine/.rvm/gems/ruby-1.8.7-p358-gems162@redmine1.2/gems/passenger-3.0.11
    	PassengerRuby /home/redmine/.rvm/wrappers/ruby-1.8.7-p358-gems162@redmine1.2/ruby
    
    	# Public directory
    	DocumentRoot /opt/redmine/redmine-1.2/public
    	<Directory /opt/redmine/redmine-1.2/public>
    		AllowOverride None
    		Options -MultiViews
    	</Directory>
    </VirtualHost>
    


    PS: В скрипте предусмотрена возможность установки используя прокси сервер. Прокси должен быть установлен через переменные окружения http_proxy и https_proxy.

    Скрипт проверен в Ubuntu 10.04 LTS Server

    UPDATE: не знаю пробовали ли вы уже данный скрипт или нет, но я нашёл в нём одну ошибку, которая была допущена при «покраске кода», прошу прощения. В строке
    "[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" && \"
    должны быть ещё два обратных слеша
    "[[ -s "\$HOME/.rvm/scripts/rvm" ]] && source "\$HOME/.rvm/scripts/rvm"" && \".

    UPDATE2: начиная с Redmine 1.4.x скрипт можно несколько упростить, т.к. Redmine стал использовать bundler для управления зависимостями.

    UPDATE3: последние версии скриптов всегда по ссылке: http://www.helplinux.ru/wiki/en:kb:redmine-installation
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 15
    • 0
      хотим получить надёжный и воспроизводимый результат

      Ubuntu

      воспользуемся RVM

      facepalm.jpg
      • +1
        убунта сервер вполне себе надежная вещь.
        а рвм по сути просто руби установленный в другое место и симлинк на него, тоже вполне себе надежно.
        • 0
          Видимо имелось в виду, что не ubuntu/debian-way устанавливать софт не из deb-пакетов/репозиториев.
          • 0
            Ubuntu 10.04
            $ apt-cache show rails|grep Version
            Version: 2.2.3-2 (а требуется 2.3.11)
            $ apt-cache show rubygems|grep Version
            Version: 1.3.5-1ubuntu2 (требуется 1.6.x)
            и т.д.

            Смысл топика заключается как раз в том, чтобы показать как создать окружение не в корневой система, в директории специально выделенного пользователя. В этом случае:
            1) обновления системы ничего не сломают;
            2) можно сделать несколько окружений с разными версиями (может быть полезно при обновлении Redmine до новой версии).
            • 0
              Это я всё в курсе. Но всё равно не debian-way. Мне подкидывали идею, что и rvm, и ruby, и гемы можно пакетами оформить самому и хотя бы ручками их ставить (а лучше рп свой поднять хотя бы локально), но я что-то не осилил. Ручками всё разворачиваю вообще.
              • 0
                debian-way автору не нравится, он захламляет что-то там у него.

                В противном случае он бы уже давно воспользовался например вотэтим и поставил все в стандартные каталоги.

              • 0
                Указывайте версию при установке rails
                gem install -v=2.3.11 rails
                и будет нужная.

                А вот это, требуется 1.6.x вы откуда взяли?
                > Version: 1.3.5-1ubuntu2 (требуется 1.6.x)

                Читайте требования, там же ясно сказано:
                RubyGems <= 1.6

              • +1
                не debian-way (package-disributive-way =) ) это компилять все из сорцов и ставить make-install'ом.
                в случае рвм, все ставить в $HOME/.rvm и на систему никак не влияет.
          • 0
            Не хочу вас обидеть, но:

            1. Смотрим на требования redmine:

            Redmine version | Supported Ruby versions
            current trunk | ruby 1.8.7, 1.9.2, 1.9.3


            2. Ищем в стандартных репах бубунты руби (у меня как ни странно под рукой как раз Ubuntu 10.04 LTS)

            $ aptitude search ruby

            получаем в списке:

            p ruby
            p ruby1.8 — интерпретатор объектно-ориентированного языка сценариев
            p ruby1.9 — интерпретатор объектно-ориентированного языка сценариев

            p rubygems — package management framework for Ruby libraries/applicati
            p rubygems1.8 — package management framework for Ruby libraries/applicati
            p rubygems1.9 — package management framework for Ruby libraries/applicati
            p rubygems1.9.1 — package management framework for Ruby libraries/appli

            т.е. имеем версию ruby 1.9 доступной для установки через обычный apt-get install. И ставим rubygems, точно так же.
            3. Дальше через gem install ... ставим все что нужно и каких нужно версий

            Собственно все. Никаких сборок из исходных кодов, о которых вы пишите не присуствует, все стандартно, систему никто не захламляет.

            Всех благ.
            • 0
              gem install засорит систему — потом не вычистишь. Предпочитаю всё непакетированное ставить либо в /opt либо в домашнюю директорию выделенного пользователя.
              • 0
                rubygems — настраивается, можно указать ему куда исталить гемы, в том числе в домашнюю папку выделенного пользователя.
                • 0
                  Можно и раньше я именно так и делал. Но на поддержку скриптов создающих необходимое окружение уходило слишком много времени. Если бы это было так — указал GEM_HOME и всё работает, то можно было бы и без RVM обойтись, но скрипты стали слишком сложные. С RVM всё проще.
              • 0
                Допустил ошибку, правильно так:

                > т.е. имеем версию ruby 1.8 доступной для установки через обычный apt-get install

                $ apt-get install ruby1.8
                ...

                $ ruby --version
                ruby 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux]


                Как видим, 1.8.7 подедрживается всеми версиями рэдмайна (http://www.redmine.org/projects/redmine/wiki/RedmineInstall)

                В отличии от 1.9

                > Compatibility notes
                >
                > Ruby 1.9 is not supported yet. You have to use Ruby 1.8.x as stated above.
              • 0
                А в репах убунты есть REE?
                • 0
                  Жаль, что Редмайн на третие рельсы никак не перепишут

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.