是否有任何Ruby gems /库可以帮助您从旧的DB结构迁移到新的结构?ActiveRecord迁移在跟踪新的数据库结构方面做得很好,但我想知道是否有什么可以帮助您将整个遗留数据库迁移到新结构:
transfer_from(:source_table => 'person', :destination_table => 'dudes_and_dudets') do
from :name, :to => :full_name
from :dob, :to => :age do |dob| # this would, for example, load the result
(Date.today - dob)/60/60/24/365 # of the block into :age
end
end
Run Code Online (Sandbox Code Playgroud)
(我意识到你可以像使用AR一样轻松地进行这些变换,但我希望魔术库可以有更多的变换.
伯恩斯
我需要将数据库从Postgres 7迁移到SQL Server 2008.我熟悉SSIS导入和导出向导,但我对如何定义数据源或定义数据提供程序感到困惑.
将Postgres迁移到SQL Server的最佳方法是什么,如何为postgres定义数据源/驱动程序?
我使用Django 1.7迁移,特别是想要用初始数据填充新创建的数据库.因此,我使用数据迁移.它看起来像这样:
def populate_with_initial_data(apps, schema_editor):
User = apps.get_model("auth", "User")
new_user = User.objects.create(username="nobody")
class Migration(migrations.Migration):
...
operations = [
migrations.RunPython(populate_with_initial_data),
]
Run Code Online (Sandbox Code Playgroud)
同时,我希望UserDetails每个新用户都有一个模型实例:
@receiver(signals.post_save, sender=django.contrib.auth.models.User)
def add_user_details(sender, instance, created, **kwargs):
if created:
my_app.UserDetails.objects.create(user=instance)
Run Code Online (Sandbox Code Playgroud)
但是:此信号仅在迁移之外有效.原因是,apps.get_model("auth", "User")与django.contrib.auth.models.User没有发送信号的情况完全不同.如果我尝试手动执行此操作,则会失败:
signals.post_save.send(django.contrib.auth.models.User, instance=julia, created=True)
Run Code Online (Sandbox Code Playgroud)
这失败了,因为那时,信号处理程序尝试使用O2O 创建一个新的 UserDetails指向历史记录 User:
ValueError: Cannot assign "<User: User object>": "UserDetails.user" must be a "User" instance.
Run Code Online (Sandbox Code Playgroud)
游民.
好的,我可以直接调用信号处理程序.但是我必须UserDetails在关键字参数(以及它需要的其他历史类)中传递历史类.此外,UserDetails具有此数据迁移的应用程序不是具有此数据迁移的应用程序,因此这将是一个丑陋的依赖性,很容易破坏,例如,如果UserDetails应用程序被删除INSTALLED_APPS.
那么,这只是一个当前的限制,我必须解决丑陋的代码和FixMe评论?或者有没有办法从数据迁移中发送信号?
我使用south创建了一个数据迁移,它采用了一个版本表并将其转换为:
major: 1, minor: 2, micro: 3, release: a
Run Code Online (Sandbox Code Playgroud)
变得更简单:
name: 1.2.3.a
Run Code Online (Sandbox Code Playgroud)
现在我想使用django单元测试(1.3beta)来测试这个数据迁移.
如何指定要使用的自定义夹具,我可以如何以编程方式向前滚动向前和向后滚动迁移?
我正在尝试通过键入以下内容将subject_id和course_id迁移到users表:
rails generate migration add_course_id_and_subject_id_to_users course_id:integer, subject_id:integer
Run Code Online (Sandbox Code Playgroud)
但是,它会导致错误:
_add_course_id_and_subject_id_to_users.rb:4:语法错误,意外的tSYMBEG,期待keyword_do或'{'或'(''
不知道为什么会这样.
让我们首先列出一些事实:
与此问题类似:如何将elasticache redis群集设置为从属?
关于这可能如何工作的一个想法:
我的问题:
*对于此类工具的任何作者都没有违法行为,我确信它们很棒,我只是对使用同一团队编写的工具更有信心,以避免潜在的兼容性错误.
我并不是100%确定我这样做是正确的,但我认为我发现了一个问题,即auth.Permission当你从头开始初始化数据库时,很快就没有创建对象以便迁移使用它们.
重要细节:
我正在尝试从头开始初始化Django DB ./manage.py syncdb --migrate --noinput
我的链中有11次迁移
第一次迁移创建了一个名为的新模型 myapp.CompanyAccount
第9次迁移尝试使用以下方式获取权限myapp.change_companyaccount:
p = orm[ "auth.Permission" ].objects.get( codename = "change_companyaccount" )
此时,会引发异常:
django.contrib.auth.models.DoesNotExist: Permission matching query does not exist
我假设在第一次迁移完成时创建了为每个对象定义的默认权限(根据http://docs.djangoproject.com/en/dev/topics/auth/#default-permissions) ,但它们似乎并非如此.如果我在异常之后重新运行迁移,它会第二次运行,因为显然现在存在权限,并且第9次迁移可以无错误地执行.
在第9次迁移运行之前的某个时间,是否可以做任何事情来"冲洗"所有内容,以便整个过程可以在一次通过中运行而不会挽救?
感谢您提供任何帮助/建议.
编辑:为了回应下面的John的评论,我发现以下命令行序列将起作用:
./manage.py syncdb (这会初始化默认的Django表)./manage.py migrate myapp 0001 (这会导致创建CompanyAccount表)./manage.py migrate myapp (这一直迁移到最终没有错误)不幸的是,跳过上面的步骤#2意味着你在0009迁移中得到了相同的异常,这告诉我我原来的怀疑是正确的,新模型的默认权限不是立即由South创建的,并且在某种程度上只是在推送到数据库时整个迁移链完成.
这比我的情况要好(我现在至少避免例外)但是我仍然需要手动分割围绕创建新模型的迁移,后者迁移可能需要触及权限,因此这不是一个完整的解.
我正在寻找好的工具来支持改变REST服务中使用的模型版本的支持.我的梦想工具会做如下:
在我的特定情况下,我不需要进行反向转换,因为我的REST服务只提供数据查找而从不存储东西,但我不介意使用两种工具:-)
我正在考虑的解决方案是在我的pojo(版本+名称)中添加自定义注释,并根据版本号创建一个基于我的pojo生成JSON/XML的代码生成器.虽然在这里我觉得我正在重新发明轮子.
编辑:以下是可以从版本1到版本1.1进行更改的示例:
版本1:人名字姓
版本1.1人名firstname birthdate
如果您使用版本1.0访问API,则不会获得birthdate属性 - 它仅在1.1版中可用.我想要工具支持使这些服务可用,在那里我可以配置授予我的pojo(目前是1.1版本),我想提供一个不显示这些值的1.0版本.
对模型的其他合法更改可能是删除属性或重命名属性(甚至重命名实体).
编辑2:数字Joel在评论中提到,关于API版本化的讨论,您应该阅读https://stackoverflow.com/posts/9789756/.
版本控制的简单方法是不要进行向后突破的API更改,而是改变业务,因此这并不总是可行的.我的兴趣在于如何使这些变化更容易处理,因此我的问题.
编辑3:我已经找到了可能有助于这个过程的工具,但仍然没有任何能够以良好的方式与休息相关联的工具.这是我到目前为止找到的链接:
我正在尝试为我的一个应用程序制定数据迁移。我正在使用这里提到的声誉系统 - django-reputation
在我的forward方法中,我有以下代码 -
orm['reputation.reputation'].objects.log_reputation_action(user = user_x, originating_user = user_y, action_value = 10, target_object = sample_obj)
Run Code Online (Sandbox Code Playgroud)
但是在运行迁移时,我收到以下错误 -
AttributeError: 'Manager' object has no attribute 'log_reputation_action'
Run Code Online (Sandbox Code Playgroud)
我已经冻结reputation了数据迁移中的应用程序。请让我知道我在这里做错了什么。
提前致谢。
我有一个具有以下配置的 AWS Lightsail 虚拟机
主要问题是 RAM 不足以满足我当前的工作并且面临内存不足的问题。
我想将 RAM 增加到至少2GB或更多。
我已经在当前计算机上安装了许多软件和必要的设置。
要点是,我不想经历再次重新安装所有软件并进行设置的痛苦,这根本不是一个容易的过程。我在 MongoDB docker 实例中也有可用的数据。
迁移到具有 2GB RAM、软件+设置和数据的新虚拟机的最佳解决方案是什么?
data-migration virtual-machine amazon-web-services amazon-lightsail
data-migration ×10
django ×3
django-south ×3
activerecord ×1
database ×1
java ×1
model ×1
postgresql ×1
redis ×1
rest ×1
ruby ×1
sql-server ×1
ssis ×1
unit-testing ×1