База данных не выбирается в проекте rails при попытке рейка db: migrate - PullRequest
8 голосов
/ 06 февраля 2011

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

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

rake db:migrate

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

Mysql2::Error: No database selected: SHOW TABLES

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

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

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

Ответы [ 9 ]

12 голосов
/ 06 февраля 2011

после всего, что это было пробелом в yaml.

9 голосов
/ 24 июня 2011

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

Это также может привести к этой проблеме.

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

require 'yaml'
YAML::ENGINE.yamler= 'syck'
2 голосов
/ 30 июня 2016

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

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

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

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password: mypassword
  socket: /tmp/mysql.sock

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

development:
 : *default
   database: #toy_development
  • Затем перезапустите командную строку и перейдитев корень вашего приложения и введите:
$ rails s 

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

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

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

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

  • Перейдите в корень моего приложения и введите:
$ mysql –u root –p 
$ Passwor: mypassword (Enter your password, this is the one you entered to secure MySQL)

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

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

  • Когда вы войдете, вы увидите указатель( mysql> ), введите после него:
mysql> GRANT ALL PRIVILEGES ON toy_development.* TO 'mark'@'localhost' IDENTIFIED BY '45mark';
  • Затем введите:
mysql> exit;
  • Проверьтечто он работает, набрав:
$ mysql –u mark –p toy_development
Enter password: 45mark (You enter the one you gave)
  • Откройте database.yml файл и настройте то, что нужно, и исправьте при необходимости.В моем случае я получу возможность пометить имя пользователя и пароль 45mark
default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: mark
  password: 45mark
  socket: /tmp/mysql.sock


- Также REMOVE хэш-тег (#), добавленный до

development:
  : *default
     database: toy_development 

Сохраните его.

  • Перейдите в корень приложения и введите
$ rake db:schema:dump

Готово !!

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

Спасибо

2 голосов
/ 21 сентября 2011

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

1 голос
/ 03 февраля 2015

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

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

  2. выполнить

    rails s
    
0 голосов
/ 13 ноября 2018

Одна потенциальная причина в том, что определена переменная окружения DATABASE_URL.

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

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

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

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

0 голосов
/ 16 апреля 2016

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

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

development:
      <<: *default
      database: db_name
0 голосов
/ 03 февраля 2015

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

rake db:test:prepare

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

http://sqlitebrowser.org/

0 голосов
/ 10 июля 2014

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

...