Моя Конфигурация:
MacBook-2.16, Intel Core 2 Duo, 4Gb 667 DDR2 SDRAM
Mac OS X version 10.6.2 - Snow Leopard
Предпосылки:
После установки нового RoR (2.3.5) приложения с MySQL подключением, WEBrick начал выдавать ошибку после нескольких тразакций
WARN TCPServer Error: Address already in use - bind(2)
Логичным решением было запуск приложения на отличном от 3000 порту
script/server -e development -p 3001
Ошибка продолжалась на любом порту, причем сервер также не запускался, когда пытался поднять его на прежнем порту еще раз
После некоторых консультаций с Волошиным, выяснили, что вероятноя проблема в mysql-gem, который каким-то образом блокирует работу порта. После небольших раздумий решил раз и навсегда перейти на PostgreSQL. Переход благо дело не был связан с переносом большого количества данных, поэтому прогуглив установку postgres для MacOSX - решил воспользоваться разрекламированным MacPorts.
MacPorts, Fink, Homebrew - Системы управления пакетами — набор программного обеспечения, позволяющие управлять процессом установки, удаления, настройки и обновления различных компонентов программного обеспечения.
через несколько часов удалил Macports, т.к. / I deleted MacPorts because a number of reasons
1. занимает очень много места,
2. конфигурирование приложений происходит на лету, пожирая неоправдано много системных ресурсов
3. не использует /usr/local и уже имеющееся установленное содержимое,
4. каждый апдейт - это отдельная папка на диске, что со временем будет занимать много неоправданного места
Погуглив, решил попробовать Homebrew - это новая (конец 2009) система управления пакетами, активно развивающаяся
http://github.com/mxcl/homebrew
приемущества описаны в 13 пунктах которые не могут не радовать.
-------------------------------------------------------------------------------------------------------------------------------------------------
Прежде чем продолжать вам потребуется
- Mac OS X 10.6 Snow Leopard
- Xcode совместимый с Snow Leopard. Xcode — это пакет инструментов для разработки приложений под Mac OS X и iPhone OS, разработанный Apple. Последняя версия Xcode 3.2, бесплатно поставляется на дистрибутивном диске Mac OS X Install DVD вместе с операционной системой Mac OS X 10.6, хотя и не устанавливается по умолчанию. ( http://developer.apple.com/technology/xcode.html )
- Уверенность в запуске UNIX команд используя Terminal
-------------------------------------------------------------------------------------------------------------------------------------------------
Шаг 1. Устанавливаем PATH / Set the PATH
Запускаем Terminal из папки /Applications/Utilities
Воспользуйтесь предпочитаемым текстовым редактором (в моем случае это TextMate с установленной командой 'mate')
mate ~/.bash_profile
в конце это файла вставляем
export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
Закройте и сохраните файл и запустите команду чтобы изменения вступили в силу
source ~/.bash_profile
Убедимся что путь обновлен, запуском команды
echo $PATH
Вы должны увидеть /usr/local/bin в начале строки возвращенной системой
Шаг 2. Установка GIT / Installing GIT
Создадим папку для храниения исходных инсталляций
mkdir ~/src
cd ~/src
Загрузим, распакуем и установим git в /usr/local
curl -O http://kernel.org/pub/software/scm/git/git-1.6.6.1.tar.gz
tar xzvf git-1.6.6.1.tar.gz
cd git-1.6.6.1
./configure --prefix=/usr/local
make
sudo make install
cd ..
Установка завершена, убедимся что git находится в /usr/local
which git
должны получить /usr/local/bin/git
Шаг 3. Установим Homebrew используя GIT / Install Homebrew using GIT
cd /usr/local
git init
git remote add origin git://github.com/mxcl/homebrew.git
git pull origin master
Установка Homebrew завершена, теперь можно устанавливать программные пакеты используя команду brew
Команды
brew search - выдаст список возможных рецептов для установки
brew list - список установленных компонентов
brew update - обновит Homebrew
Шаг 4. Установка RubyGems / Install RubyGems
cd ~/src
curl -O http://files.rubyforge.vm.bytemark.co.uk/rubygems/rubygems-1.3.5.tgz
tar xzvf rubygems-1.3.5.tgz
cd rubygems-1.3.5
sudo /usr/bin/ruby setup.rb
cd ..
Шаг 5. Уходим от постоянного sudo при установки джемов и указываем им путь /Cellar/gems/1.8 / Change ownership in order to get rid of 'sudo' everytime installing gems and setting Homebrew parent path.
sudo chown -R $USER /Library/Ruby /Library/Perl /Library/Python
sudo chown -R $USER /usr/local
echo export GEM_HOME="$(brew --prefix)/Cellar/Gems/1.8" >> ~/.bash_profile
echo export GEM_PATH="$(brew --prefix)/Cellar/Gems/1.8:/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/lib/ruby/gems/1.8/gems" >> ~/.bash_profile
echo "export GEM_HOME='$(brew --prefix)/Cellar/gems/1.8'" >> ~/.bashrc
source ~/.bashrc ~/.bash_profile
Шаг 6. Присоединияем Gems / Linking Gems
gem install brewbygems
Brewbygems - джем который позволяет устанавливаеть весть джем в папку Homebrew’s Cellar (Cellar/Gems/1.8/)
Для того чтобы система отрабатывала установленные джемы необходимо запусть команду
brew link gems
устанавливаем любой джем, например ROR
gem install rails
Шаг 5. Устанавливаем Nginx c модулем Passenger / Install Nginx with Passenger
brew install nginx --with-passenger
вы можете стартовать nginx командой sudo nginx и останавливать его командой
sudo nginx -s stop
Шаг 7. Устанавливаем PostgreSQL / Install PostgreSQL
brew install postgresql
В конце инсталляции будут инструкции как инициализировать БД, Запустить сервер, запустить сервир при входе, и установка postgres gem - сделайте это все
Шаг 8. Конфигурируем сервер / Configure server
a. Открываем файл
/usr/local/Cellar/nginx/0.7.62/conf/nginx.conf
(вероятно со временем будет другой префикс версии)
user your_user;
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
# Passenger
# passenger_root - будет менятся с вашей версией passenger
# вы можете получить текущий путь используя команду passenger-config --root
passenger_root /usr/local/Cellar/Gems/1.8/gems/passenger-2.2.9;
# passenger_ruby - скрипт который фиксит переменные среды
passenger_ruby /usr/local/bin/gem_ruby;
passenger_default_user your_user;
sendfile on;
keepalive_timeout 65;
# Include virtual host configurations
include your_user.conf;
}
Создаем файл
mate gem_ruby.sh
#!/bin/bash
export GEM_PATH=/usr/local/Cellar/Gems/1.8:/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/lib/ruby/gems/1.8/gems
export GEM_HOME=/usr/local/Cellar/Gems/1.8
/usr/bin/ruby $*
cохраняем его
в /usr/local/bin
Создаем файл
mate your_user.conf
server {
listen 80;
server_name your_user.local;
root /Users/your_use/path/to/public;
rails_env development;
passenger_enabled on;
charset utf-8;
}
Изменяем файл /etc/hosts
mate /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
127.0.0.1 your_user.local
9. Устанавливаем Thin / Install Thin
Thin - быстрый и простой ruby вэб сервер
Более подробно http://code.macournoyer.com/thin/
gem install thin
теперь вместо команды script/server можем использовать команду thin start для запуска приложения
10. Конечно же конфигурируем наш database.yml для PostgreSQL / Configure PostgreSQL connection
development:
adapter: postgresql
database: samsoffes_development
encoding: utf8
username: your_user
password:
host: localhost
production:
adapter: postgresql
database: samsoffes_production
encoding: utf8
username: your_user
password:
host: localhost
test:
adapter: postgresql
database: samsoffes_test
encoding: utf8
username: your_user
password:
host: localhost
или создаем новый Rails проект
rails projectname -d postgresql
Заходим в PostgreSQL prompt и создаем пользователя и БД
$ psql postgres
# CREATE USER your_user SUPERUSER;
# CREATE DATABASE projectname_development OWNER your_user;
# CREATE DATABASE projectname_test OWNER your_user;
# CREATE DATABASE projectname_production OWNER your_user;
# \q
Если нужно чтобы юзер был суперюзером для того чтобы тесты запускались корректно, см. http://blogs.law.harvard.edu/djcp/2009/01/rails-22-postgres-and-testing/comment-page-1/
-------------------------------------------------------------------------------------------------------------------------------------------------
Надеюсь найдется пользователь Mac OSX в наших краях, которому это будет полезно.