我需要在一个大的(5米行)django表中添加一个新列.我有一个南方schemamigration创建了新专栏.现在我正在编写一个datamigration脚本来填充新列.看起来像这样.(如果您不熟悉南迁移,只需忽略orm.模型名称的前缀.)
print "Migrating %s articles." % orm.Article.objects.count()
cnt = 0
for article in orm.Article.objects.iterator():
if cnt % 500 == 0:
print " %s done so far" % cnt
# article.newfield = calculate_newfield(article)
article.save()
cnt += 1
Run Code Online (Sandbox Code Playgroud)
我从切换objects.all,以objects.iterator减少内存的需要.但是当我运行这个脚本时,某些东西仍在咀嚼着巨大的内存.即使上面注释了实际有用的行,脚本仍然会增长到使用10 GB以上的ram,然后才能在表格中走得很远而且我放弃了它.
好像在内存中持有某些东西.我该如何运行它,这不是记忆猪?
FWIW,我使用的是python 2.6,django 1.2.1,南0.7.2,mysql 5.1.
我的网站jquery.load()用于在页面的大块上进行导航.我真的很感激能够只包含加载内容的特定部分,这里是id ="content"的div:
$(frame_selector).load(url +" #content", function(response, status, xhr) {...});
Run Code Online (Sandbox Code Playgroud)
但是现在我需要能够运行作为动态加载页面一部分的脚本. Jquery.load()剥离这些脚本,但jquery.ajax()没有.所以我复制了jquery.loadajax调用中的部分内容功能:
$.ajax({
url: url,
dataType: 'html',
success: function(data, textStatus, XMLHttpRequest) {
// Only include the response within the #content id element.
$(frame_selector).html( jQuery("<div>")
.append(data)
.find("#content")
);
}
});
Run Code Online (Sandbox Code Playgroud)
问题是从ajax调用动态加载的脚本无法可靠地运行.有时它们似乎没有任何影响,可能是因为它们运行得太早.脚本只是在jquery中进行DOM操作 - 不依赖于图像或flash或任何不应该加载的东西.为了避免陷入困境,我有这个可怕的黑客来让事情发挥作用.而不是仅使用AJAX加载的脚本:
$(document).ready( function() {...} ); // unreliable
Run Code Online (Sandbox Code Playgroud)
我在运行之前将脚本延迟200ms:
$(document).ready( window.setTimeout( function() {...}, 200 )); // HATE THIS
Run Code Online (Sandbox Code Playgroud)
有人知道如何在没有硬编码延迟的情况下可靠地完成这项工作吗?我猜这是加入新div的<script>逻辑和我的逻辑之间的竞争条件#content,但我不知道该怎么做.
据您所知,在没有使用5分钟后,Heroku会让您的免费dyno实例进入睡眠状态,这将使下一个请求更慢.[编辑:他们在一小时不活动后睡觉.]
有没有办法可以让实例保持活力?也许通过确保网站始终被使用?
谢谢.
我的系统包括一个任务,它打开网络套接字,从网络接收推送的数据,处理它,然后根据消息将其写入磁盘或ping其他计算机.此任务旨在永久运行,并且该服务旨在使此任务始终运行.但有时它会崩溃.
保持这样的任务活着的最佳做法是什么?假设任务在我们重新启动之前最多可以死30秒.
一些明显的想法包括检查以确保进程仍在运行的监视程序进程.看门狗可以被触发cron.但它如何知道这个过程是否存在?写一个pidfile? touch一个心跳文件?如果机器陷入监视器运行速度超过心跳的程度,理想的解决方案就不会持续增加更多进程.
有没有标准的linux工具?我可以想象一个使用消息队列的解决方案,但我不确定这是不是一个好主意.
我正在使用django-celery,我想设置TASK_SERIALIZER为JSON而不是pickle.
我可以通过更改我的任务装饰器来逐个方法地执行此操作
@task
Run Code Online (Sandbox Code Playgroud)
至
@task(serializer="json")
Run Code Online (Sandbox Code Playgroud)
但我想在全球范围内做到这一点.设置
TASK_SERIALIZER="json"
Run Code Online (Sandbox Code Playgroud)
在settings.py不起作用.试着跑
import celery
celery.conf.TASK_SERIALIZER="json"
Run Code Online (Sandbox Code Playgroud)
(为暗示这里)导致
AttributeError: 'module' object has no attribute 'conf'
Run Code Online (Sandbox Code Playgroud)
知道如何通过django运行芹菜时配置此设置?
当我在开发中启动rails控制台时,我看到FactoryGirl创建了对象.显然我做错了,但是这样做的正确方法是什么?这段代码使我的测试工作......
# tests/factories/board.rb
FactoryGirl.define do
factory :word do
sequence(:text) { |n| "FAKETEXT#{n}" }
end
factory :board do
trait :has_words do
words [
FactoryGirl.create(:word, id: "514b81cae14cfa78f335e250"),
FactoryGirl.create(:word, id: "514b81cae14cfa7917e443f0"),
FactoryGirl.create(:word, id: "514b81cae14cfa79182407a2"),
FactoryGirl.create(:word, id: "514b81cae14cfa78f581c534")
]
end
end
end
Run Code Online (Sandbox Code Playgroud)
请注意,在我的config目录中的任何文件中都没有提到工厂的任何内容,因此gem会自动进行任何加载.我Gemfile读到的相关部分:
# Stuff not to use in production
group :development, :test do
# Command-line debugger for development
gem "debugger"
# for unit testing - replace fixtures
gem "factory_girl_rails"
end
Run Code Online (Sandbox Code Playgroud)
所以我可以把工厂女孩带出开发环境.但我认为这些记录是在工厂使用之前创建的,这表明我的工厂编写错误.但如果你告诉我工厂写得正确,我就会这样做.
IDE在许多方面都很出色。但是我不喜欢它们如何使我使用GUI来完成我可以在命令行中更快地键入内容的操作。例如,打开一个已知的特定文件。如果我知道文件名,则可以从命令行输入编辑器的名称和文件名。使用制表符完成功能,我可以在可靠的时间内非常快地完成此操作。无需搜索输出或将手指从键盘上移开。
在Eclipse中,有没有一种方法可以通过简单地通过输入路径+文件名来打开已知文件?也许通过插件?
“开放资源”快捷键(ctrl-shift-R)差不多就是它,但是它只能让您键入文件名,而不是路径。如果在不同目录中有多个同名文件,则必须再次使用鼠标寻找所需内容。
问题:文档很少,而且我是一个菜鸟 - 任何人都可以确认正确的(假设有一种)方法将Backbone.Views绑定到Backbone.RelationalModel的实例(来自backbone-relational.js)更新/渲染到dom?基于Backbone中正常的模型/视图绑定,我尝试了一些不同的方法,但收效甚微.
背景故事(/更多信息): 我正在学习Backbone.js的绳索,并且在过去的一周里不得不接受很多.如果我遗漏了一些明显的东西(极有可能 - 包括以下处理我问题的"正确"方式),请打电话给我.
我正在处理一个mongodb支持的REST接口(我没有完全控制 - 或者我将重新设计服务器端的行为),它充分利用了嵌套字典,所以我一直在阅读如何在Backbone中最好地表示(虽然没有打破Backbone提供的伟大的save()+服务器同步).
我见过两种选择:backbone-relational和ligament.js.
我开始使用backbone-relational.js,并且为树中的各种字典创建了RelationalModel(骨干关系代替Backbone的标准模型),这些字典由REST接口传回.定义它们之间的关系,并且控制台记录每个模型的JSON(在它们各自的初始化函数中)显示它们都在整个集合级别的fetch()命令上正确地从服务器上调用/加载.
所以,这一切都很棒.
问题:我有"监听"每个模型的更新视图(以及应该在dom上渲染模板的绑定函数),并且它们根本不会"触发"(更不用说渲染......).主视图触发fetch(),没有问题,加载"顶级"模型并在dom上呈现它 - 但代表"顶级"模型中的"外键"模型的视图永远不会(尽管数据肯定会加载到每个模型中,如上面提到的每个模型的控制台登录所示.
非常感谢任何见解.
直接回复下面的Raynos回复(感谢Raynos!): 如果我为UpperLevelCollection定义了一个基本url,而UpperLevelModels存在于服务器上的(UpperLevelCollection url)/(UpperLevelModel id),那么我如何将这些LowerLevelCollections映射到字典键中服务器端的每个UpperLevelModel的一个JSON转储?换句话说,使用模型中的集合可以正确地处理来自服务器的数据转储(显然非常简化,但可以解决问题)并正确保存/更新/同步它?
[{
"some_key": "Some string",
"labels": ["A","List","Of","Strings"],
"content": [{
"id": "12345"
"another_key": "Some string",
"list": ["A","list","of","strings"],
},{
"id": "67890"
"another_key": "Some string",
"list": ["A","list","of","strings"],
}],
}]
Run Code Online (Sandbox Code Playgroud) 我正在使用django-celery将数据库用作代理和结果存储.事件正在处理中,但监控(celerycam或celeryev)无法正常工作.
我的settings.py包括
import djcelery
djcelery.setup_loader()
BROKER_BACKEND = "django"
CELERY_IMPORTS = (
"cbridge.tasks",
)
INSTALLED_APPS += [
'djcelery',
'djkombu',
]
Run Code Online (Sandbox Code Playgroud)
这足以从任何地方manage.py celeryd将进程中的任务cbridge.tasks插入到队列中,有时会将结果返回到启动任务的线程.(我现在有时会把它留下来.)所以系统设置足以让任务实际运行,这很棒,但是......
我的问题是如何让我对任务进行任何监控?djcelery_桌子上没有任何东西出现过.
我跑步manage.py celerycam或者manage.py celeryev他们启动很好但从不做任何事情.我猜我还需要设置更多配置变量.但他们是什么?我试过设定
CELERY_RESULT_BACKEND = "database"
CELERY_RESULT_DBURI = "mysql://root:@localhost/cbridge"
Run Code Online (Sandbox Code Playgroud)
但他们没有任何区别.我希望celeryev并celerycam阅读与celeryd相同的配置设置.他们为什么不呢?
django ×3
python ×3
celery ×2
android ×1
audio ×1
backbone.js ×1
cordova ×1
django-south ×1
eclipse ×1
factory-bot ×1
heroku ×1
javascript ×1
jquery ×1
jquery-load ×1
linux ×1
mongoid ×1
performance ×1
plugins ×1
process ×1
ruby ×1