【问题标题】:Database not being selected in rails project when attempting to rake db:migrate尝试 rake db:migrate 时未在 rails 项目中选择数据库
【发布时间】:2011-06-22 04:31:12
【问题描述】:

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

当我执行时:

rake db:migrate

我收到以下错误:

Mysql2::Error: No database selected: SHOW TABLES

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 migration rake mysql2


    【解决方案1】:

    一个潜在的原因是定义了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 中指定数据库详细信息。

    【讨论】:

      【解决方案2】:

      嗯,这对我们初学者来说是一个常见的问题。这个问题来自您在 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,密码 Ill给是45mark。下面你会看到我在哪里应用这些元素。请记住在语句的每个部分应用您自己的元素。

      为此项目创建和用户

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


      - 另外,REMOVE之前添加的井号(#)

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

      保存。

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

      完成!!

      我希望这会有所帮助。编码愉快!

      谢谢

      【讨论】:

        【解决方案3】:

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

        default: &default
             adapter: mysql2
             encoding: utf8
             pool: 5
             username: root
             password: 12345
             host: localhost
        
        development:
              <<: *default
              database: db_name
        

        【讨论】:

          【解决方案4】:

          试试这个。

          rake db:test:prepare
          

          安装这个看看你是否真的创建了一个表。打开db文件夹中的“development.sqlite3

          http://sqlitebrowser.org/

          【讨论】:

            【解决方案5】:

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

            1. Ctrl + C

            2. 执行:

              rails s
              

            【讨论】:

              【解决方案6】:

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

              【讨论】:

                【解决方案7】:

                我在 ruby​​ 1.9.2-p180 上遇到了同样的问题,升级到 p290 并且可以正常工作

                【讨论】:

                  【解决方案8】:

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

                  这也可能导致此问题。

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

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

                  【讨论】:

                    【解决方案9】:

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

                    【讨论】:

                    • re5et,我也有同样的问题你还记得什么是间距问题以及在哪个 yml 文件中吗?
                    • 将是您的数据库配置文件,请确保缩进是有效的 yaml。
                    • 谢谢 - 这个回复为我指明了正确的方向。最后,对我来说,这是一个 YAML 解析问题,正如该线程中所讨论的:stackoverflow.com/questions/4980877/…
                    猜你喜欢
                    • 2012-06-30
                    • 2011-02-16
                    • 2015-02-02
                    • 2016-11-19
                    • 2011-10-09
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2017-10-04
                    相关资源
                    最近更新 更多