Почему мои рельсы mysql ломаются при доступе через сокет только в рельсах? - PullRequest
0 голосов
/ 16 февраля 2012

Обновление: На самом деле, когда у меня просто есть приложение на базе MySQL, я все равно получаю ошибку сокета -

Mysql2 :: Ошибка: невозможно подключиться к локальному серверу MySQL через сокет '/opt/local/var/run/mysql5/mysqld.sock' (2)

Так что мой mysql должен быть испорчен, но я не знаю, как это исправить. Я могу войти в него полностью нормально через mysql, и я могу «использовать» свою базу данных и выбирать из таблиц в приглашении mysql.

Но приложение rails или консоль rails Я просто не могу работать.

Я пытаюсь получить доступ к базам данных mysql и postgres, но когда я пытаюсь получить доступ к mysql, я получаю информацию postgres! Примечание: я пытаюсь перейти на postgres «в», и я считаю, что это «master» (если он имеет значение), а mysql - источник старых данных, к которым я пытаюсь получить (только для чтения).

В частности, у меня есть таблица пользователей в каждой базе данных. В моем файле database.yml есть следующее:

common: &common
  adapter: postgresql
  encoding: unicode
  host: localhost
  encoding: UTF8
  username: my_user_name

development:
  <<: *common
  database: newapp_development
  pool: 5

mysql_development:
  adapter: mysql
  encoding: utf8
  username: my_user_name
  database: oldapp_development

У меня есть пользовательская таблица в postgres и модель User:

class User < ActiveRecord::Base
end

У меня есть таблица пользователей в mysql и Модель пользователя, которую я поместил в подкаталог models / Mysql. Он по-прежнему называется user.rb, но его содержимое:

class Mysql::User < ActiveRecord::Base
  establish_connection "mysql_development"
end

Однако, когда я захожу в консоль и выполняю Mysql :: User.all, я получаю:

`[1] pry(main)> Mysql::User.all
(pry):1: warning: toplevel constant User referenced by Mysql::User
  User Load (2.6ms)  SELECT "users".* FROM "users"`

НО ... возвращенные данные от postgres НЕ mysql. Я могу сказать, что имена столбцов в разных пользовательских таблицах совершенно разные, и вместо 464 я ожидал только 5 записей.

Я уверен, что это возможно, но у меня просто неправильное пространство имен или что-то в этом роде, но каждая комбинация, которую я пробовал, до сих пор не работала.

Я попытался изменить имя директории на 'Oldapp', а имя модели на OldApp :: MysqlUser, но когда я это сделал и попробовал Oldapp :: MysqlUser.all, я получил

Mysql::Error: Can't connect to local MySQL server through socket '/opt/local/var/run/mysql5/mysqld.sock' (2)
from /Users/michaeldurrant/.rvm/gems/ruby-1.9.2-p290@ruby1.9.2_Abroad101/gems/activerecord-3.1.3/lib/active_record/connection_adapters/mysql_adapter.rb:931:in `real_connect'

Ответы [ 2 ]

2 голосов
/ 17 февраля 2012

Можете ли вы добавить путь к сокету в mysql_development:

  mysql_development:
    adapter: mysql
    encoding: utf8
    username: my_user_name
    database: oldapp_development
    socket: '/var/run/mysqld/mysqld.sock'

Чтобы найти путь к сокету в вашей системе, обратитесь к этому файлу: /etc/mysql/my.cnf

0 голосов
/ 17 февраля 2012

Вы также можете посмотреть, какие сокеты (ы) на вашем MySQL сервере открыты действительно .Во-первых, вам понадобится pid сервера mysql:

PID=pidof mysqld

С этим pid вы увидите, что сокет (ы) mysql открылся:

lsof -p $PID | grep sock

Вы можете послепроверьте путь и права на этот сокет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...