有没有办法将一个提交从一个分支重新绑定到另一个分支?
我有这个分支结构:
-- -- -- -- -- (Master)
\
-- -- -- -- -- XX (Feature-branch)
Run Code Online (Sandbox Code Playgroud)
我想要做的就是将最后一次提交改为Feature-branchmaster并回滚Feature-branch一次提交.
-- -- -- -- -- XX (Master)
\
-- -- -- -- -- (Feature-branch)
Run Code Online (Sandbox Code Playgroud)
我怎么做?
Celery似乎没有正确处理异常.
如果我有任务:
def errorTest():
raise Exception()
Run Code Online (Sandbox Code Playgroud)
然后我打电话
r = errorTest.delay()
In [8]: r.result
In [9]: r.state
Out[9]: 'PENDING'
Run Code Online (Sandbox Code Playgroud)
它会无限期地挂起来.
去检查日志显示错误被抛出任务(如果你想要消息,请问),我知道后端和一切都设置正确,因为其他任务正常工作并正确返回结果.
在Celery中捕捉异常需要做些什么时髦吗?
/ Celery版本是3.0.13,经纪人是RabbitMQ在我的本地机器上运行
所以我目前正在为AWS Lambda函数构建部署程序.
由于AWS版本都共享一个配置,因此需要具有多个函数(foo_prod,foo_staging,foo_whatever),这些函数是我们代码的各种版本,而不是像我想要的那样使用别名.
所以我的问题是:
1)是否有一种理智的方式来重新部署代码.(IE:Staging to Prod)不先将其下载到我的桌面,然后重新上传.
2)我对该共享配置位是否错误,或者是否可以告诉该函数在实际Lambda中运行哪个别名,以便我可以为每个环境创建多个环境变量.
在celery中,是否有一种简单的方法可以创建一系列(可用于)自动重启工作者的任务?
目标是让我的部署在每次从github获取新源时自动重启所有子芹菜工作者.因此,我可以向该机器上的管理celery实例发送一个restartWorkers()任务,该实例将杀死(实际上是等待)该机器上的所有芹菜工作进程,并使用新模块重新启动它们.
该计划适用于每台机器:
看起来我需要的代码是在dist_packages/celery/bin/celeryd_multi.py中的某个地方,但是对于启动工作者来说,源代码是相当不透明的,我无法分辨它应该如何工作或它实际启动节点的位置.(看起来shutdown_nodes是正在调用以杀死进程的正确代码,我正在慢慢调试我的方法来弄清楚我的参数应该是什么)
是否有函数/函数restart_nodes(self,nodes)我可以调用某个地方,或者我将从python中运行shell脚本?
/另外,是否有更简单的方法将源重新加载到Python而不是杀死并重新启动进程?如果我知道重新加载模块实际上有效(实验说它没有.在重新启动过程之前,函数的更改不会渗透),我只是这样做,而不是管理节点的间接.
编辑:我现在可以关闭,感谢广播(谢谢你,迈克尔.如果我有更多的代表,我会upvote).有什么方法可以播放重启?有pool_restart,但这不会杀死节点,这意味着它不会更新源.
我一直在研究celery.bin.celeryd:WorkerCommand().run()中的一些幕后资源,但是在运行调用之前和之后都有一些奇怪的事情发生,所以我不能只调用它功能和完成因为它崩溃了.从python脚本调用shell命令来运行另一个python脚本是有道理的,我无法相信我是第一个想要这样做的人.
在Chef中,为什么这段代码没有捕获bash资源中抛出的异常?如果我运行此代码,即使抛出异常,我也永远不会访问python资源.错误是预期的,这就是为什么我抓住它,然后转向pymongo并以这种方式修复它.
begin
bash "mongo fix" do
code "mongo --verbose #{filename}"
action :run
end
rescue
python 'pymongo reconfig' do
code "Pymongo does a catch and reconfig"
end
end
Run Code Online (Sandbox Code Playgroud)
这是异常输出
[2013-03-05T20:03:55+00:00] FATAL: Mixlib::ShellOut::ShellCommandFailed: bash[mongo fix (noudata::mongo line 77) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '253'
---- Begin output of "bash" "/tmp/chef-script20130305-3916-14xxhn5-0" ----
STDOUT: MongoDB shell version: 2.2.3
Tue Mar 5 20:03:55 versionCmpTest passed
Tue Mar 5 20:03:55 versionArrayTest passed
connecting to: test
Tue Mar 5 20:03:55 …Run Code Online (Sandbox Code Playgroud) 所以我在具有集群rabbitmq后端的多台服务器上运行celery。最近,我对 celery 所做的任何事情都开始无限期地挂起,检查rabbitmq 的日志为我提供了这个模糊的错误消息:
=ERROR REPORT==== 20-Mar-2013::23:52:25 ===
connection <0.15823.3>, channel 1 - soft error:
{amqp_error,not_found,
"no binding i-69995906 between exchange 'i-69995906' in vhost 'celery' and queue 'i-69995906' in vhost 'celery'",
'queue.bind'}
Run Code Online (Sandbox Code Playgroud)
运行 rabbitmqctl list_bindings 给了我这个:
# rabbitmqctl list_bindings -p celery
Listing bindings ...
exchange celery queue celery []
celery exchange celery queue celery []
...done.
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能摆脱错误?我已经重新启动了Rabbitmq,重新安装了Rabbitmq,并删除并恢复了集群。我猜我需要恢复先前存在的绑定,但我不知道如何从 rabbitmqctl 或 celery 恢复。如果这不起作用,我的芹菜任务根本不起作用。
celery ×3
python ×3
aws-lambda ×1
celeryd ×1
chef-infra ×1
git ×1
mongodb ×1
rabbitmq ×1
rebase ×1
ruby ×1