2

当我点击 rake db:migrate 我在我的应用程序中使用 figaro 时,我得到了类似的东西,这是我第一次使用这个 gem 任何 mysql,所以我不知道什么是错误的。提前致谢 :)

Mysql2::Error: No database selected: CREATE TABLE schema_migrations( versionvarchar(255) PRIMARY KEY) ENGINE=InnoDB

数据库.yml

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: <%= ENV["DB_USER"] %>
  password: <%= ENV["DB_PASSWORD"] %>

development:
  <<: *default
  database: <%= ENV["DB_DATABASE_DEV"] %>


test:
  <<: *default
  database: <%= ENV["DB_DATABSE_TEST"] %>


production:
  <<: *default
  database: <%= ENV['DB_DATABASE_PRODUCTION'] %>

应用程序.yml

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

development:
  <<: *default
  database: dev

test:
  <<: *default
  database: test_db
4

4 回答 4

2

我没有足够的理由在评论中提问,但似乎您正在尝试运行迁移而不先创建模式。

运行rails db:create以首先创建架构。例如,如果您的 MySQL 中没有名为“dev”的数据库,则此命令将执行此操作。

rails db:create

设置特定环境

rails db:create RAILS_ENV=test

然后你运行即可rails db:migrate

如果需要,要销毁架构:

rails db:drop

你正在使用 ENV

虽然它可能不相关,但您在运行命令之前是否正确设置了 ENV?

对于 Windows,您可以添加那些,例如 DB_USER 到system environment

只需按开始并键入system environment>> Environment Variables...>>New...

Variable Name: DB_USER
Variable Value: your_username

注意:您可能必须重新启动系统才能使环境正常工作。

或者,如果您没有时间,只需在终端中运行 rails s:

C:\Sites\ProjectName> set DB_USER=your_username
C:\Sites\ProjectName> set DB_PASSWORD=your_username
C:\Sites\ProjectName> rails s

Linux的步骤相同,但我不知道具体的命令。有些人更喜欢使用 .env 文件。

于 2017-06-02T01:12:32.660 回答
0

当您database.yml不包含database: some_database部分或数据库名称为空时会发生这种情况。在您的情况下,您可以使用以下几个选项之一:

选项 1:运行包含数据库名称 env 变量的迁移

DB_DATABASE_DEV=your_dev_db_name rails db:<task>

database.yml选项 2:在文件中使用硬编码的数据库名称

# database.yml
development:
  <<: *default
  database: my_development_database

选项 3:确保正确加载 env 变量

要在 linux 中这样做,只需在终端中编写:

echo ${DB_DATABASE_DEV}

在 windows 终端上,你需要这样写:

echo %DB_DATABASE_DEV%

如果没有内容,则未设置此环境变量

于 2019-04-16T06:32:22.057 回答
0

我今天跑了同样的问题。

确保您已安装 dotenv-rails gem,并且“DB_DATABASE_DEV”在您的 .env 文件中有一个值。

另外,请确保您的数据库已创建。

于 2018-07-26T22:26:19.820 回答
0

几天前我遇到了这个麻烦,这很烦人,因为 Rails 试图在开发环境中创建开发和测试数据库。没有任何效果。

我最终硬编码database:database.yml中,并让 Figaro 管理凭据。

于 2017-06-02T06:58:07.093 回答