9

使用 rails 应用程序,遇到一些奇怪的数据库/rake 问题。

当我执行时:

rake db:migrate

我收到以下错误:

Mysql2::Error: No database selected: SHOW TABLES

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

跟踪没有透露太多有用的信息。可以在这里看到:http: //pastebin.com/WdsguudC

配置文件看起来正确,并且用户正在登录,否则我会遇到某种访问错误。数据库存在,用户有正确的权限,我可以手动访问和操作。我做了一堆谷歌搜索,没有发现任何有用的东西。不确定是否需要提供任何其他代码,因为这似乎是相当低级的问题。

4

9 回答 9

12

毕竟这是 yaml 中的间距问题。

于 2011-02-06T08:25:24.270 回答
9

请注意,ruby 在最近的 1.9.2 版本中交换了它的 YAML 解析器。

这也可能导致此问题。

为了切换回旧的 YAML 解析器syck ,请在boot.rb中使用

require 'yaml'
YAML::ENGINE.yamler= 'syck'
于 2011-06-24T16:24:57.060 回答
3

嗯,对于我们初学者来说,这是一个常见的问题。这个问题来自您在 Rails 中创建新项目的那一刻。假设有一个例子

$ rails new toy –d mysql
  • 完成捆绑并启动服务器后,您很可能会遇到错误。要更正它,您需要转到您的database.yml并修改以下内容:

在密码字段中添加密码,如下所示,这是您用于保护 mysql 的密码。

默认值:&默认值
  适配器:mysql2
  编码:utf8
  游泳池:5
  用户名:root
  密码:我的密码
  套接字:/tmp/mysql.sock

另外,注释掉数据库,在名称前添加井号 (#),如下所示

发展:
 : *默认
   数据库:#toy_development
  • 然后重新启动命令行并转到应用程序的根目录并键入:
$ 导轨

您必须查看 Ruby on Rails 欢迎页面。

  • 之后,您需要创建一个数据库。

创建一个数据库。

问题消息是说没有选择 DATABASE。这是因为我没有创建一个。当您使用 MySQL 时,您必须创建一个,因此:

  • 转到我的应用程序的根目录并键入:
$ mysql –u root –p
$ 密码:mypassword(输入您的密码,这是您输入的用于保护 MySQL 的密码)

注意:此示例适用于一个名为toy的项目,我想授予权限的用户是mark,我将提供的密码是45mark。下面你会看到我在哪里应用这些元素。请记住在语句的每个部分应用您自己的元素。

为这个项目创建和用户

  • 进入后,您将看到指针(mysql>),因此在其后键入:
mysql> GRANT ALL PRIVILEGES ON toy_development.* TO 'mark'@'localhost' IDENTIFIED BY '45mark';
  • 然后输入:
mysql>退出;
  • 通过键入以下内容检查它是否正常工作:
$ mysql –u 标记 –p toy_development
输入密码:45mark(你输入你给的那个)
  • 打开database.yml文件并配置所需内容并根据需要进行修复。在我的情况下,我将有机会标记用户名并将密码标记为 45mark
默认值:&默认值
  适配器:mysql2
  编码:utf8
  游泳池:5
  用户名:mark
  密码:45马克
  套接字:/tmp/mysql.sock


- 此外,删除之前添加的井号 (#)

发展:
  : *默认
     数据库:toy_development

保存。

  • 转到应用程序的根目录并键入
$ rake db:schema:dump

完毕!!

我希望这有帮助。编码快乐!!

谢谢

于 2016-06-30T13:45:30.567 回答
2

我对 ruby​​ 1.9.2-p180 有同样的问题,升级到 p290 并且它可以工作

于 2011-09-21T14:54:45.047 回答
1

只需重新启动服务器;在命令行中:

  1. Ctrl+C

  2. 执行:

    rails s
    
于 2015-02-03T14:16:25.383 回答
0

我在输入时遇到了类似的错误, rake db:schema:dump结果我只需要注释掉我的 yaml 文件中的所有数据库,除了我的数据库development

于 2014-07-09T23:18:15.373 回答
0

试试这个。

rake db:test:prepare

安装它以查看您是否实际创建了一个表。打开db 文件夹中的“ development.sqlite3 ”

http://sqlitebrowser.org/

于 2015-02-03T15:01:49.647 回答
0

它是一个简单的错误检查整个 database.yml 文件,看看在哪里给出了默认的描述数据库名称是否给出,如果没有,那么在下面看,还会给出另一个开发名称,其中数据库的配置是使用检查,给你其中的数据库名称

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

development:
      <<: *default
      database: db_name
于 2016-04-16T14:42:16.603 回答
0

一个潜在的原因是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

于 2018-11-13T05:43:40.253 回答