是否有rake命令来清除数据库表中的数据?
如何创建db:seed脚本以将数据预填充到表中?
我试着运行$ bundle exec rake db:reset并在控制台上找到以下内容
Couldn't drop db/development.sqlite3 : #<Errno::EACCES: Permission denied - c:/sample_app/db/development.sqlite3>
db/development.sqlite3 already exists
-- create_table("users", {:force=>true})
-> 0.3940s
-- add_index("users", ["email"], {:name=>"index_users_on_email", :unique=>true})
-> 0.1280s
-- initialize_schema_migrations_table()
-> 0.0010s
-- assume_migrated_upto_version(20120419034627, ["c:/sample_app/db/migrate
"])
-> 0.0040s
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
编辑我正在关注一个教程,它告诉我运行上面的命令来安全地删除数据库中的所有数据.我也在使用管理员帐户.
我刚刚安装了设备,所以除了一个用户(我)之外,表上没有任何数据.
我再次重新做数据库所以我放弃了所有.我做rails g scaffold了6个新的模型和控制器,并做了rake db:migrate
在我的/db/migrate目录中,我有一个带文件名的devise文件20130603211907_devise_create_users.rb
问题出在这里:如果我这样做rake db:migrate:down VERSION=20130603211907,将删除所有新的迁移.
如何在不删除所有较新的迁移的情况下再次运行迁移?
工作正在从Rails 3过渡到Rails 4.在开发方面,一切似乎都或多或少地顺利运行,但是当所有套件 - 单元,功能和集成 - 一次性运行时,测试会导致各种各样的失败.rake:test.
有趣的是,单独运行每个套件都不会产生任何故障.这有力地表明数据库没有像Rails 3那样重置我们在Rails 4中的测试.
我已经尝试覆盖rake:db:test:prepare在运行每个套件之前执行测试任务,但这显然没有做我认为它做的,或者更确切地说,我想要它做什么,这是使用一套新的每个测试的数据,因此独立于其他测试成功或失败 - 在我们的Rails 3设置中它(已经或应该是)的方式.
为什么会这样?我该怎么办呢?
(请注意,测试框架是带有夹具等的vanilla Rails.我们得到的测试失败通常是外键错误或数据以预期方式更改的失败,在测试之前重置DB时不会显示套房.)
编辑:
以下是我对Rakefile所做的更改.我们的想法是获得rake:test,就像在Rails 3中一样,除了在单元,功能和集成套件之间正确地重置数据库.
# /Rakefile
task :test => [];
Rake::Task[:test].clear
task :test do
puts Rails.env
if Rails.env == "test"
puts "units"
# Rake::Task["db:drop"].execute - results in 'test database not configured' error
# Rake::Task["db:reset"].execute - results in 'relation 'table' does not exist' error
Rake::Task["db:create"].execute
Rake::Task["db:migrate"].execute
Rake::Task["test:units"].execute
puts "functionals"
Rake::Task["db:schema:load"].execute
Rake::Task["test:functionals"].execute
puts "integration"
Rake::Task["db:schema:load"].execute
Rake::Task["test:integration"].execute
end
end
Run Code Online (Sandbox Code Playgroud)
编辑2:
Rails版本4.1.8
这是我的test_helper.我省略了不能使用我们数据的辅助方法,因为我可能不允许共享它们,并且它们与测试数据库的加载方式无关.
另请注意,我们还有一个自定义schema.rb,从中生成测试数据,因为尝试从迁移创建它们不支持我们在最终产品中需要的一些自定义功能/行为,例如物化视图.编辑后的内容将包含在<< …
我创建了两个模型并运行了迁移,尝试了每个模型的一些工作,现在我想重新开始并以不同的方式处理它们.我是Rails的新手,并且从未尝试删除/删除数据库表(除了在我迁移它们之后立即回滚它们).
谢谢!
我在rake db:migrate中面临一个问题.当我使用scaffold创建模型,运行db:migrate然后使用scaffold d Posts删除模型时,问题就出现了.
现在我再次使用scaffold g创建模型,并运行db:migrate.由于用户表已经存在,它给了我一个错误.我该如何解决这个问题?
murtaza@murtaza-dev:~/workspace/rails/base$ rake db:migrate
== CreatePosts: migrating ====================================================
-- create_table(:posts) rake aborted! An error has occurred, this and all later migrations canceled:
SQLite3::SQLException: table "posts" already exists: CREATE TABLE "posts" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "content" text, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)
Tasks: TOP => db:migrate (See full trace by running task with --trace) murtaza@murtaza-dev:~/workspace/rails/base$ rake db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行 rake db:create ,它说数据库已经存在(我以前从未创建过这个数据库,这是一个新项目)。当我运行 rake db:migrate 时,它显示“未知数据库”。我检查了mysql数据库(显示数据库;),该数据库确实不存在。
有人知道那是什么吗?我寻找解决方案但没有成功。
当我运行 rake db:create 时
rake db:create
Celluloid 0.17.3 is running in BACKPORTED mode. [ http://git.io/vJf3J ]
adimax_development already exists
adimax_test already exists
Run Code Online (Sandbox Code Playgroud)
当我运行 rake db:migrate 时
rake db:migrate
Celluloid 0.17.3 is running in BACKPORTED mode. [ http://git.io/vJf3J ]
rake aborted!
Mysql2::Error: Unknown database 'adimax_development'
Run Code Online (Sandbox Code Playgroud)
数据库.yml
development:
adapter: mysql2
encoding: utf8
database: adimax_development
pool: 5
username: root
password:
Run Code Online (Sandbox Code Playgroud)
错误: 错误图片: