尝试 rake db:migrate 时未在 rails 项目中选择数据库
Posted
技术标签:
【中文标题】尝试 rake db:migrate 时未在 rails 项目中选择数据库【英文标题】:Database not being selected in rails project when attempting to rake db:migrate 【发布时间】: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
配置文件看起来正确,并且用户正在登录,否则我会遇到某种访问错误。数据库存在,用户有正确的权限,我可以手动访问和操作。我做了一堆谷歌搜索,没有发现任何有用的东西。不确定是否需要提供任何其他代码,因为这似乎是相当低级的问题。
【问题讨论】:
【参考方案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】:只需重启服务器;在命令行中:
按 Ctrl + C
执行:
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 解析问题,正如该线程中所讨论的:***.com/questions/4980877/…以上是关于尝试 rake db:migrate 时未在 rails 项目中选择数据库的主要内容,如果未能解决你的问题,请参考以下文章
为啥 rake db:migrate:reset 未在 rake -T 中列出?
rake db:migrate 在开发 AWS Beanstalk 中运行
兼容性问题? rake db:migrate - 参数数量错误(1 代表 0)
markdown rake db:reset,rake db:migrate:resetの违い