Странно но я не нашел в сети ни одного внятного мануала по установке на 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 чтобы убедиться что они могут спокойно жить рядом друг с другом
1) Ставим macports.
www.macports.org/install.php
Скачиваем и устанавливаем через gui по ссылке, дальше в консоли:
2) Ставим апач
3) Меняем DocumentRoot в httpd.conf чтобы он указывал на нужную нам папку.
Я создал папку Rails в домашней директории, в ней public_html в качестве document root.
Все приложения я создаю в ~/Rails и линкую в public_html.
4) Cтавим mysql
5) Ставим php5
6) Правим httpd.conf:
7) Проверяем что все работает:
проверяем браузером localhost, должна быть страница phpinfo
1) Cтавим ruby
2) Cтавим rubygems
в macports старая версия, поэтому ставим из исходника
docs.rubygems.org/read/chapter/3
4) Cтавим rails
5) Ставим связку с mysql
6) Cтавим mod_rails
www.modrails.com/install.html
7) Правим httpd.conf, вставляем то что нам выдал инсталлер:
www.modrails.com/documentation/Users%20guide%20Apache.html
8) Правим httpd.conf, для каждого приложения прописываем RailsBaseUri после указания DocumentRoot (Соответственно директива работает и для vhosts), причем насколько я понимаю рельсы могут быть в любой подпапке. Railsenv — необязательно, здесь указываем какое окружение использовать по умолчанию.
8) Проверяем что мы на рельсах — создаем тестовое приложение
Теперь можно зайти браузером на localhost/testapp/tests, порадоваться (надеюсь) и убедиться что все отлично работает
Для работы понадобится 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, порадоваться (надеюсь) и убедиться что все отлично работает