Проверка конфигурации
Перед тем как продолжить путь, нам, пожалуй, нужно проверить только что
созданную конфигурацию — мы можем убедиться в том, что Rails способна подключиться
к нашей базе данных и у нее имеются права доступа, необходимые для
создания таблиц. Из каталога верхнего уровня, принадлежащего вашему приложению,
наберите в командной строке приведенное ниже магическое заклинание.
(Магическим мы его назвали потому, что нам на данный момент совершенно ни
к чему знать, что именно оно делает. Мы узнаем об этом чуть позже.)
depot> rake db:migrate
Есть два варианта развития событий. Вы получите в ответ либо текстовую
строку (сообщающую что-то вроде «in (/Users/dave/work/depot)»), либо сообщение
о какой-нибудь ошибке. Это сообщение будет означать, что Rails не может
работать с вашей базой данных. Если вы увидите сообщение об ошибке, то можете
попробовать сделать следующее:
• Проверьте имя, присвоенное вами базе данных в разделе development: файла
database.yml. Оно должно совпадать с именем созданной базы данных (с помощью
mysqladmin или какого-нибудь другого средства администрирования баз
данных).
• Убедитесь, что имя пользователя и пароль в файле database.yml соответствуют
имени и паролю, которые вы создали согласно инструкциям в подразделе
«Создание базы данных» раздела 6.1.
• Проверьте, запущен ли сервер базы данных.
• Проверьте возможность подключения к нему из командной строки. Если вы
используете MySQL, запустите следующую команду:
depot> mysql -u root depot_development
mysql>
• Если вам удалось подключиться из командной строки, то почему бы не создать
пробную (dummy) таблицу? (Тем самым вы убедитесь в том, что пользователь
обладает достаточными правами доступа к базе данных.)
mysql> create table dummy(i int);
mysql> drop table dummy;
• Если вы можете создавать таблицы из командной строки, но команда rake
db:migrate не проходит, еще раз проверьте содержимое файла database.yml.
Если файл содержит указатели socket:, попытайтесь их закомментировать,
поставив перед каждым знак решетки (#).
• Если вы увидите сообщение об ошибке «No such file or directory..> («Такой
файл или каталог не существует»), где в качестве имени файла будет фигурировать
mysql.sock, значит, ваши библиотеки Ruby MySQL не могут найти базу
данных MySQL. Это может случиться, если вы установили библиотеки до того,
как была установлена база данных, или если вы установили библиотеки,
используя двоичный установочный пакет, при работе которого было сделано
неверное предположение относительно размещения сокет-файла MySQL.
Чтобы исправить положение, лучше всего переустановить библиотеки Ruby
MySQL. Если такой вариант вам не подходит, добавьте к файлу database.yml
строку socket: , в которой укажите правильный путь к сокет-файлу MySQL,
имеющемуся в вашей системе:
development:
adapter: mysql
database: depot_development
username: root
password:
host: localhost
socket: /var/lib/mysql/mysql.sock
• Если вы получите сообщение об ошибке «Mysql not loaded» («MySQL не загружен
»), значит, вы запустили устаревшую версию библиотеки Ruby Mysql.
Rails необходима версия не старше 2.5.
• Некоторые читатели сообщают также о получении сообщения об ошибке «Client
does not support authentication protocol requested by server; consider upgrading
MySQL client» («Клиент не поддерживает протокол аутентификации, требуемый
сервером; клиент MySQL следует обновить»). Это свидетельствует о несовместимости
установленной версии MySQL и библиотек, используемых
для доступа. Несовместимость можно устранить, выполнив инструкции, изложенные
по адресу http://dev.mysql.com/doc/mysql/en/old-client.html, и запустив команду
MySQL, устанавливающую пароль для 'some_user'@'some_host' =
OLD_PASSWORD('newpwcT);.
• Если MySQL используется под Cygwin в Windows, то ввод localhost при
указании хоста может вызвать проблемы. Попробуйте вместо этого воспользоваться
адресом 127.0.0.1.
• Проблемы могут возникнуть и при использовании фирменной Ruby-версии
библиотеки MySQL (в отличие от использования большинства исполняемых
библиотек, написанных на С). Решения, подходящие для различных операционных
систем, можно найти на веб-сайте Rails wiki1.
• И наконец, проблемы могут возникнуть с форматом файла database.yml. Библиотека
YAML, с помощью которой осуществляется чтение этого файла,
странным образом чувствительна к использованию символов tab. Поэтому
при наличии в файле символов табуляции возникают проблемы. (А вы-то думали,
что отдали предпочтение Ruby, а не Python, поскольку невзлюбили значащие
пустые символы последнего?)
Но всего этого бояться, пожалуй, не стоит. На самом деле подключение к базе
данных чаще всего работает как по нотам. И как только вы заставите Rails общаться
с базой данных, дальнейшие волнения потеряют всякий смысл.
http://wiki.rubyonrails.com/rails/pages/Mysql+Connection+ Problems/.