我正在使用sqlalchemy编写Web应用程序。 在网站未投入生产的第一阶段,一切都很顺利。 我可以很容易地通过删除旧的sqlite数据库和从头开始创build一个新的数据库模式。 现在,网站正在生产中,我需要保留这些数据,但是我仍然希望通过轻松地将数据库转换为新的模式来保持原始开发速度。 所以我们假设在版本50中有model.py,在版本75中有model.py,描述了数据库的模式。 在这两个模式之间,大部分的改变是微不足道的,例如一个新的列被声明为一个默认值,我只是想把这个默认值添加到旧的logging。 最终,一些改变可能不是微不足道的,需要一些预先计算。 如何(或者将要)处理快速变化的Web应用程序,比如每天有一两个新版本的生产代码? 顺便说一句,如果这有什么不同,网站是写在主塔上。
我一直在研究Gradle,看起来很有趣。 我认为能够使用除XML以外的其他语言编写脚本非常酷,而且我不清楚polyglot Maven POM文件是否仍然是一个可行的select。 我正在开发一个使用Maven 2.2.1作为构build工具的项目。 这个项目: 是多模块的 使用(也是我们自己的)插件 依赖Artifactory代理库 有没有从Maven到Gradle的迁移经验? 陷阱,痛点,angular落案件? 任何经验都是非常受欢迎的。
我们有多个开发人员在使用Entity Framework 5.0的项目上工作。 每个开发人员都使用他自己的本地SQL 2012数据库,以便在不妨碍其他人的情况下开发和testing。 起初,我们使用了自动迁移和基于代码的迁移的混合。 这根本不能很好地工作,所以我们决定禁用自动迁移,只允许基于代码。 我应该补充一点,我们再次启动一个干净的数据库,没有从所有的自动迁移中“损坏” _MigrationsHistory 。 所以现在的工作stream程是: 开发人员更改他的数据模型 add-migration <Name>并将其应用到他的数据库与update-database 。 检查数据模型更改和迁移到Git。 另一个开发人员将接收更改并将其应用于其数据库。 到目前为止,这工作得很好。 然而,在今天之前,通常只有我是使移民和其他人实行移民。 但是今天有三个开发者的迁移。 我只是把这些迁移,做了一个update-database ,这很好。 然而,我也对自己的datamodel进行了修改,所以在update-database的最后,它给了我一个警告,说明我还没有及时更新,所以我做了add-migration <my migration> 。 但是,当它支持迁移时,它给了我已经应用到数据库的所有迁移的变化。 所以:它试图删除已经被删除的列,尝试创build一个已经存在的表等。 怎么可能? 我的假设是,EF只会检查_MigrationsHistory表,并找出表中尚未出现哪些迁移,然后逐一应用名称中包含的时间戳。 但显然不是,因为即使当我撤消自己的变化,我有一个干净的环境,它仍然抱怨我的数据库不与模型同步。 但我只是把这些改变,并将其应用到我的数据库。 它是同步的。 我可以看到我刚刚在_MigrationsHistory表中应用的迁移。 我能想到的唯一的事情是我添加了一个属性到一个datamodel,不会导致数据库的变化(我添加了一个List<X> datamodel Y其中X是在一对多关系中的许多。这不会导致数据库更改,因为X已经有一个外键到Y)。 那可以吗? 如果是这样,这真的很脆弱,因为没有办法为此添加迁移,因为没有数据库更改,我不知道如何解决这个问题。 我不知道如何处理这个问题,因为我当然可以编辑它的脚手架,并删除已经应用到我的数据库的所有东西。 但是呢? 我检查了一下,然后其他一些开发者得到了同样的信息,即使在应用我的新变更之后,他的数据库也没有及时更新,脚手架自己的变化,得到同样的废话脚手架,编辑它,检查它,然后下一个开发人员得到它。 它变成了一个恶性循环,与我们使用自动迁移时所遇到的类似,我认为我们已经通过切换到仅基于代码的方式来解决这个问题。 现在我不能相信它做正确的事情,这是一个噩梦,这样的工作。 我也尝试过使用update-database -t:201211091112102_<migrationname>将我从同事那里获得的迁移一一添加,但无济于事。 它仍然给我错误的脚手架。 那么,我们在这里做错了什么,或者EF是不是为这样的协作而build? UPDATE 我创build了一个可重复的testing用例,但是为了模拟这个多用户/多数据库场景,这是一个漫长的舞蹈。 https://github.com/JulianR/EfMigrationsTest/ 有上述项目时重现的步骤(这些步骤也存在于代码中): 添加迁移Init 更新数据库(在数据库'TestDb') 将连接string更改为指向TestDb1 […]
我有一个PostgreSQL数据库,我想移动到SQL Server – 架构和数据。 我很穷,所以我不想付任何钱。 我也很懒,所以我不想做太多的工作。 目前我按桌子做这张桌子,大约有100张桌子。 这是非常乏味的 有什么我想要的技巧吗?
我正在使用Rails 3.2并进行包含代码的迁移: add_column :users, :gift_aid, :integer, :default => 2 # reset columns User.reset_column_information … code here to load legacy data from sqlite3 database … # now create a user with the loaded column data user = User.create( …other cols…, :gift_aid => migrated_gift_aid_column_data, …other cols… ) 运行迁移时会得到unknown attribute: gift_aid 。 User.column_names在调用User.column_names之前和之后显示相同的列表。 奇怪的是,当我手动删除列在MySQL中,并重新运行迁移它按预期工作。 从第一次迁移开始,再次使用一个空的数据库,它不起作用,所以这是运行所有的迁移,而不是单一的迁移。 我有几个以前的用户模型的迁移,都包括reset_column_information和工作正常。 我真的在摸索这个问题 – […]
我有一个表'用户'栏'电子邮件'。 它曾经是唯一的(有索引),但是新的要求是允许nils在那里。 有没有比以下更好的解决scheme: remove_index :users, :email add_index :users, :email ? 最初它增加了独特的选项: add_index :users, :email, :unique => true
我的意思是“rebasing”在字典中,而不是git定义… 我有一个大型的,长期运行的Rails项目,有大约250次迁移,但是pipe理所有这些变得难以处理。 也就是说,在运行testing时,我确实需要从中清除和重build数据库。 所以这些数据是很重要的。 有没有人有任何策略可以说,倾向于在一个设定点的架构 – 归档所有旧的迁移,并重新开始新的迁移。 很明显,我可以使用rake模式:转储 – 但我真的需要一种方式:db:migrate将首先加载模式,然后开始运行其余的迁移。 我想继续使用迁移,因为它们在开发中非常有用,但是,我不能从2007年开始编辑迁移,因此保留它似乎很愚蠢。
这里有一个几乎相同的,但没有真正回答的问题。 我正在将一个应用程序从MS SQL Server迁移到PostgreSQL。 在代码中的很多地方我使用局部variables,所以我想去做需要较less工作的变化,那么请告诉我哪个是翻译下面代码的最好方法? — MS SQL Syntax: declare 2 variables, assign value and return the sum of the two declare @One integer = 1 declare @Two integer = 2 select @One + @Two as SUM 这返回: SUM ———– 3 (1 row(s) affected) 我将使用Postgresql 8.4甚至9.0,如果它包含重要的fetaures,将简化翻译。
如果我使用迁移来更新数据库,并添加一个像这样的整数字段: t.integer :foo :default => 0, :null => false 数据库中现有logging和新logging的默认状态是什么? 我希望答案是: – 都将读回foo为0。 是默认=> 0必要的,如果我有:null => false? 试图了解两者之间的区别
我有以下SQL我需要做的 CREATE TABLE cars_users2 AS SELECT DISTINCT * FROM cars_users; DROP TABLE cars_users; ALTER TABLE cars_users2 RENAME TO cars_users; 因为我不能使用heroku dataclips来删除一个表,我不能使用dataclips。 所以我想我需要在迁移中做到这一点。 我如何写这个SQL作为迁移?