在我们当前的开发工作流程中,我们引入了数据库迁移(使用Ruckusing)以使我们的开发人员的db模式保持同步.它工作得很好,使用起来非常简单,但现在我们已经切换到git作为VCS,我们正面临着数据库版本控制系统中的下一个问题.
在检查已经处于开发状态一段时间的分支时,可能会发生数据库模式与我来自的分支中的模式分歧很多.这在某些情况下会导致数据库冲突.从逻辑上看,似乎我们需要根据我们以前的分支运行迁移,但这可能会非常快速地复杂化,并且肯定会遇到一些问题.据我所知,没有一个分支感知的数据库迁移系统?
当切换到功能分支时增加了复杂性我们可能需要运行一些迁移而其他功能下降...技术上这似乎不可能使用我们当前的dbmigration脚本,是否有任何理智的替代方案?在非常活跃和分支的开发系统中是否有任何首选的数据库迁移方法?
我需要在我的Rails应用程序中的现有表中添加一个新的整数列.该列只能有值1,2,3,所以我想在表/列中添加一个检查约束.如何在Rails迁移中指定此约束?
我已经看到很多为Rails应用程序制作Docker容器的例子.通常,他们运行rails服务器并拥有运行迁移/设置的CMD,然后启动Rails服务器.
如果我同时生成其中5个容器,Rails如何处理尝试启动迁移的多个进程?我可以看到Rails检查通用查询日志中的当前模式版本(它是一个MySQL数据库):
SELECT `schema_migrations`.`version` FROM `schema_migrations`
Run Code Online (Sandbox Code Playgroud)
但是如果在不同的Rails实例上同时发生这种情况,我可以看到竞争条件.
考虑到DDL在MySQL中不是事务性的,并且我在运行迁移时看不到通用查询日志中发生任何锁定(除了每次迁移事务),看起来并行启动它们是个坏主意.事实上,如果我在本地启动三次,我可以看到两个rails实例在尝试创建表时崩溃,因为它已经存在,而第三个rails实例很快就完成了迁移.如果这是一个将某些东西插入数据库的迁移,那将是非常不安全的.
那么运行一个运行迁移/设置的单个容器然后产生(例如)一个Unicorn实例然后生成多个rails工作人员会更好吗?
我是否应该产生N个轨道容器和一个运行迁移的"迁移容器"然后退出?
有更好的选择吗?
mysql ruby-on-rails database-migration rails-migrations docker
我重新安装了Postgres(9.2.4),但是我无法通过Rails 3.2.11重新启动它.我做了:
brew install postgresql
initdb /usr/local/var/postgres
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Run Code Online (Sandbox Code Playgroud)
所以现在我有
$ psql --version
psql (PostgreSQL) 9.2.4
$ which psql
/usr/local/bin/psql
Run Code Online (Sandbox Code Playgroud)
我的database.yml文件看起来像
development:
adapter: postgresql
encoding: unicode
database: myapp_development
pool: 5
username: Tyler
password:
host: localhost
port: 5432
Run Code Online (Sandbox Code Playgroud)
当我跑,rake db:create:all然后rake db:migrate我得到错误:
PG::Error: ERROR: relation "posts" does not exist
LINE 5: WHERE a.attrelid = '"posts"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON …Run Code Online (Sandbox Code Playgroud) postgresql activerecord ruby-on-rails database-migration ruby-on-rails-3
我安装了迁移,php artisan migrate:install然后使用该php artisan migrate:make create_teams_table命令创建了迁移.现在我尝试使用我根据官方文档制作的以下命令运行它们:
php artisan migrate --path=app/foo/migrations/2014_01_21_143531_create_teams_table.php
Run Code Online (Sandbox Code Playgroud)
这在控制台上给了我以下内容:
什么都没有迁移.
migrations数据库中的表为空,并且不会创建新表.我不明白为什么文档foo在路径中说.什么foo意思,它来自哪里?首先我认为路径是错误的,因为foo我知道路径是相对于app文件夹所以我改变它app/database/migrations但它不起作用.我也尝试了很多其他路径组合,但没有一个工作.
我走错了路吗?在这种情况下,控制台不应该显示其他一些有用的消息吗?什么foo意思?我该如何运行迁移?
在Rails 4.2中,当通过引用或add_reference创建表或添加引用时,如何指定外键应在删除时级联.
生成脚手架的命令:
rails g scaffold Child parent:references name:string
Run Code Online (Sandbox Code Playgroud)
导致的迁移:
create_table :childs do |t|
t.references :parent, index: true, foreign_key: true
t.string :name
t.timestamps null: false
end
Run Code Online (Sandbox Code Playgroud) 有人能给我一个简短的介绍,使用Mongoid在Rails中进行数据库迁移吗?我对每个文档迁移的懒惰特别感兴趣.这意味着,无论何时从数据库中读取文档,都要将其迁移到最新版本并再次保存.
有没有人以前做过这种事情?我遇到过mongoid_rails_migrations,但它没有提供任何类型的文档,虽然它看起来像这样做,但我真的不确定如何使用它.
我应该指出,我只是在概念上熟悉ActiveRecord迁移.
最近我们在数据库服务器上遇到了问题,经过长时间的努力,决定更改数据库服务器.因此,我们设法在另一台服务器上恢复数据库,更改连接字符串等.在我们尝试从Web浏览器访问网站之前,一切都按计划进行.
我们开始收到有关未找到数据库对象的错误.后来我们发现它是由于修改后的模式名称而发生的.由于Kentico数据库中有数百个数据库对象(表,视图和存储过程),因此无法一个接一个地手动更改所有这些对象.有这样做的实用方法吗?
sql database-migration kentico sql-server-2008 database-schema
我有一个rails应用程序没有应用到我的schema.rb.迁移应该创建一个表:
class CreateUserGraphs < ActiveRecord::Migration
def change
create_table :user_graphs do |t|
t.string :name
t.string :content
t.integer :user_id
t.string :type_id
t.integer :upload_id
t.timestamps
end
add_index :user_graphs, [:user_id, :created_at]
end
end
Run Code Online (Sandbox Code Playgroud)
我做db:reset.然后我尝试了rake db:migrate:up VERSION = 123123123(这是迁移#).我在"开发"环境中.
为什么迁移不会影响schema.rb?
ruby-on-rails database-migration rails-migrations ruby-on-rails-4
的背景
我正在用SequelizeJS构建一个项目,这是一个流行的NodeJS ORM.在设计架构时,似乎有两种策略:
我的理解是#1对于快速原型设计更好,但对于预计会随着时间的推移而发展并且生产数据需要能够在迁移中存活的项目而言,#2是最佳实践.
这个问题与策略#2有关.
问题
我的表有必须通过外键反映的关系.
如何通过Sequelize QueryInterface创建具有外键关系的表?
Sequelize需要哪些列和帮助程序表?例如,似乎需要特定的列,例如createdAt或updatedAt.
mysql ×2
activerecord ×1
docker ×1
git ×1
git-branch ×1
kentico ×1
laravel ×1
mongoid ×1
node.js ×1
php ×1
postgresql ×1
ruby ×1
sequelize.js ×1
sql ×1