База данных не выбирается в проекте rails при попытке рейка db:migrate

Работа с приложением rails, имеющая некоторые странные проблемы с базой данных / рейком.

Когда я выполню:

rake db:migrate

Я получаю следующую ошибку:

Mysql2::Error: No database selected: SHOW TABLES

(See full trace by running task with --trace)

След не раскрывает много полезной информации. Можно увидеть здесь: http://pastebin.com/WdsguudC

Файл конфигурации выглядит правильно, и пользователь входит в систему, иначе я получил бы какую-то ошибку доступа. База данных существует, у пользователя есть правильное разрешение, и я могу обращаться к ней и манипулировать ею вручную. Я много гуглил и ничего полезного не нашел. Не уверен, что есть какой-то другой код, который нужно предоставить, потому что это похоже на проблему довольно низкого уровня.

9 ответов

После всего этого это была проблема расстояния в ямле.

Обратите внимание, что ruby ​​изменил свой синтаксический анализатор YAML в последней версии 1.9.2.

Это также может вызвать эту проблему.

Чтобы вернуться к старому syck- анализатору YAML, используйте это в boot.rb:

require 'yaml'
YAML::ENGINE.yamler= 'syck'

Ну, это общая проблема для нас, начинающих. Эта проблема возникает с момента, когда вы создаете свой новый проект в рельсах. Допустим, есть пример

 $ rails новая игрушка - d mysql 
  • После того, как вы выполните сборку и запустите свой сервер, скорее всего, у вас будет ошибка. Чтобы исправить это, вам нужно перейти в ваш database.yml и изменить следующее:

Добавьте пароль в поле пароля, как показано ниже, это пароль, который вы используете для защиты mysql.

по умолчанию: & по умолчанию
  адаптер: mysql2
  кодировка: utf8
  бассейн: 5
  имя пользователя: root
  пароль: мой пароль
  сокет: /tmp/mysql.sock 

Кроме того, закомментируйте базу данных, добавив хеш-тег (#) перед именем, как показано ниже

развитие:: *дефолт
   база данных: #toy_development
  • Затем перезапустите командную строку и перейдите в корень приложения и введите:
 $ рельсы с 

Вы должны увидеть страницу приветствия Ruby on Rails..

  • После этого вам нужно создать базу данных.

Создать базу данных.

В сообщении о проблеме говорится, что не выбрана база данных. Это потому, что я не создал его. Когда вы работаете с MySQL, вы должны создать его, поэтому:

  • Перейдите в корень моего приложения и введите:
 $ mysql –u root –p 
$ Passwor: mypassword (введите пароль, который вы ввели для защиты MySQL)

Примечание. Этот пример работает с проектом под названием toy. Пользователь, которому я хотел предоставить привилегии, - это mark, а пароль, который я дам, - 45mark. Ниже вы увидите, где я применяю эти элементы. Не забудьте применить свои собственные элементы к каждой части утверждения.

Создать и пользователя для этого проекта

  • Когда вы войдете, вы увидите указатель (mysql>), поэтому введите после него:
 mysql> ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ на toy_development.* TO 'mark'@'localhost', ОПРЕДЕЛЯЕМЫЙ '45mark'; 
  • Затем введите:
 mysql> выход; 
  • Проверьте, работает ли он, набрав:
 $ mysql –u mark –p toy_development
Введите пароль: 45 балл (Вы вводите тот, который вы дали) 
  • Откройте файл database.yml и настройте то, что нужно, и исправьте, как требуется. В моем случае я получу шанс, что имя пользователя будет помечено, а пароль - 45.
по умолчанию: & по умолчанию
  адаптер: mysql2
  кодировка: utf8
  бассейн: 5
  имя пользователя: отметка
  пароль: 45 балл
  сокет: /tmp/mysql.sock


- Кроме того, УДАЛИТЕ хеш-тег (#), добавленный до

 развитие:: *дефолт
     база данных: toy_development 

Сохрани это.

  • Зайдите в корень приложения и наберите
 $ rake db: схема: дамп 

Готово!!

Надеюсь, это поможет. Удачного кодирования!

Спасибо

У меня была такая же проблема с ruby ​​1.9.2-p180, обновлена ​​до p290, и она работает

Просто перезагрузите сервер; в командной строке:

  1. Нажмите Ctrl + C

  2. выполнить:

    rails s
    

У меня была похожая ошибка, когда я набрал rake db:schema:dump и получается, что мне просто нужно закомментировать все базы данных в моем файле yaml, кроме моего development один.

Попробуйте это.

rake db:test:prepare

Установите это, чтобы увидеть, действительно ли вы создали таблицу или нет. Откройте файл "development.sqlite3" в папке db

http://sqlitebrowser.org/

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

default: &default
     adapter: mysql2
     encoding: utf8
     pool: 5
     username: root
     password: 12345
     host: localhost

development:
      <<: *default
      database: db_name

Одна из возможных причин заключается в том, что существует DATABASE_URL переменная окружения определена.

$ echo $DATABASE_URL
=> mysql2://root@localhost:3306

Если вы получите вывод, похожий на приведенный выше URL (т. Е. Имя базы данных отсутствует), то вы можете добавить имя базы данных в строку или сбросить env var.

$ export DATABASE_URL=mysql2://root@localhost:3306/my_rails_app_development
$ unset DATABASE_URL

если ты unset Var, вы, вероятно, хотите указать детали базы данных в database.yml вместо.

Другие вопросы по тегам