Rails 2.3.5 + mod_rails + MAMP на OSX Tiger

    Странно но я не нашел в сети ни одного внятного мануала по установке на OS X рельсов с mod_rails — нового (относительно) модуля для Апача, избаляющего от головной боли при деплое. Все мануалы какие-то устаревшие, то Mongrel, то FastCGI. Как ни странно, в этом не оказалось ничего сложного — получился эдакий зомби из старых туториалов и пары новых действий.

    Для работы понадобится XCode (для тигра последний 2.5) — он не установлен по умолчанию, но может быть найден на установочном диске Mac OS X или скачан с сайта Apple's Developer Connection developer.apple.com. Все команды нужно набирать в терминале — его можно найти в /Программы/Служебные программы (/Applications/Utilities). Так же я пользуюсь Textmate для редактирования файлов (команда mate в консоли), он тоже не стоит по дефолту так что можно пользоваться vi или pico.

    Отмечу два момента:

    1) Я все ставил на OSX 10.4, думаю особых отличий от Леопардов быть не должно, но замечу что REE 1.8.7.xxx у меня работать отказался (из-за бага в MRI: redmine.ruby-lang.org/issues/show/405)

    2) Я специально ставил mod_rails параллельно с php чтобы убедиться что они могут спокойно жить рядом друг с другом
     
     
     
     

    Часть I. Подготовка обычного MAMP Environment



    1) Ставим macports.
    www.macports.org/install.php
    Скачиваем и устанавливаем через gui по ссылке, дальше в консоли:

    sudo port selfupdate
     

    2) Ставим апач

    sudo port install apache2
    sudo ln -s /opt/local/apache2/bin/apachectl /opt/local/bin/apache2ctl

     

    3) Меняем DocumentRoot в httpd.conf чтобы он указывал на нужную нам папку.
    Я создал папку Rails в домашней директории, в ней public_html в качестве document root.
    Все приложения я создаю в ~/Rails и линкую в public_html.

    sudo mate /opt/local/apache2/conf/httpd.conf

    # --- httpd.conf --- #

    DocumentRoot "/Users/ikido/Rails/public_html"
    <Directory "/Users/ikido/Rails/public_html">

    # --- httpd.conf --- #

     

    4) Cтавим mysql

    sudo port install mysql5-server
    sudo -u mysql mysql_install_db5
    sudo ln -s /opt/local/bin/mysql5 /opt/local/bin/mysql

    # Запускаем Mysql
    /opt/local/lib/mysql5/bin/mysqld_safe &

    # Ставим пароль, закрываем рутовый доступ из сети итд
    /opt/local/lib/mysql5/bin/mysql_secure_installation

     

    5) Ставим php5

    sudo port install php5 +apache2 +mysql5

    cd /opt/local/apache2/modules
    sudo /opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so # активируем модуль php5

     

    6) Правим httpd.conf:

    sudo mate /opt/local/apache2/conf/httpd.conf

    # --- httpd.conf --- #

    <IfModule mime_module>
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps

    <IfModule dir_module>
    DirectoryIndex index.html index.php

    # --- httpd.conf --- #
     

    7) Проверяем что все работает:

    echo "<? phpinfo(); ?>" > /Users/ikido/Rails/public_html/index.php
    sudo apache2ctl start


    проверяем браузером localhost, должна быть страница phpinfo

     
     
     
     

    Часть II. Теперь ставим Ruby Environment



    1) Cтавим ruby

    sudo port install ruby
     

    2) Cтавим rubygems
    в macports старая версия, поэтому ставим из исходника
    docs.rubygems.org/read/chapter/3

    mkdir -p /opt/src/
    cd /opt/src/
    curl -O files.rubyforge.vm.bytemark.co.uk/rubygems/rubygems-1.3.5.tgz
    tar zxf rubygems-1.3.5.tgz
    cd rubygems-1.3.5
    sudo ruby setup.rb

     

    4) Cтавим rails

    sudo gem install rails --include-dependencies
     

    5) Ставим связку с mysql

    sudo gem install mysql -- --with-mysql-dir=/opt/local/lib/mysql5/
     

    6) Cтавим mod_rails
    www.modrails.com/install.html

    sudo gem install passenger
    sudo passenger-install-apache2-module --apxs2-path /opt/local/apache2/bin/apxs

     

    7) Правим httpd.conf, вставляем то что нам выдал инсталлер:
    www.modrails.com/documentation/Users%20guide%20Apache.html

    sudo mate /opt/local/apache2/conf/httpd.conf

    # --- httpd.conf --- #

    LoadModule passenger_module /opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.2.9/ext/apache2/mod_passenger.so
    PassengerRoot /opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.2.9
    PassengerRuby /opt/ruby-enterprise/bin/ruby

    # --- httpd.conf --- #

     

    8) Правим httpd.conf, для каждого приложения прописываем RailsBaseUri после указания DocumentRoot (Соответственно директива работает и для vhosts), причем насколько я понимаю рельсы могут быть в любой подпапке. Railsenv — необязательно, здесь указываем какое окружение использовать по умолчанию.

    # --- httpd.conf --- #

    DocumentRoot "/Users/ikido/Rails/public_html"
    RailsBaseURI /testapp
    RailsBaseURI /someotherapp
    RailsEnv development

    # --- httpd.conf --- #

     

    8) Проверяем что мы на рельсах — создаем тестовое приложение

    cd ~/Rails
    rails -d mysql testapp
    ln -s /Users/ikido/Rails/testapp/public/ public_html/testapp
    cd testapp
    mate config/database.yml # вписываем пароль mysql
    rake db:create
    script/generate scaffold test
    rake db:migrate
    sudo apache2ctl restart


    Теперь можно зайти браузером на localhost/testapp/tests, порадоваться (надеюсь) и убедиться что все отлично работает
    Поделиться публикацией

    Комментарии 6

      0
      Спасибо за статью, полезно.

      P.S. может, кто сталкивался со сравнением перфоманса использования разных серверных ОС (в частности Mac OS X server)?
        0
        Я пока не сталкивался, но в ближайшее время предстоит деплоить простейшее приложение на CentOS, если будет интересный экспириенс — напишу
        0
        Не нашли, наверное, потому что ставят не mod_rails, а passenger (что конечно одно и тоже).
        И ставят сразу на nginx :)
        REE не то же что MRI.
        А в остальном верно (порты рулят).
          0
          если пхп не нужен, лучше отказаться от апача в пользу nginx + passenger. Да и вообще, зачем использовать php+rails, если можно оставить что-то одно?

          >> P.S. может, кто сталкивался со сравнением перфоманса использования разных серверных ОС (в частности Mac OS X server)?

          мак под сервер это как-то непрактично, имхо. тем более, под элементарный веб-сервер, с которым любой линукс справится на ура.

          и REE там норм работать будет, и найти проще — берешь VPS/VDS и делаешь с ним что хочешь.
            0
            Может быть посоветуете где лучше взять VPS/VPS под это дело? Желательно в Москве.
            Я пожалуй прислушаюсь и попробую nginx + passenger — статья была все-таки о том как это дома поднять, а дома и пхп может пригодится.
              0
              Мало ли кто забредет — взял дебиан на hc.ru, пока полет нормальный, но если народу мало на сайт ходит то нужно подкрутить PassengerPoolIdleTime = 0 в конфиге апача, а то он выгружает рельсовые процессы и потом нужно ждать секунд 10 чтобы все это дело запустилось.

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

          Самое читаемое