我在我的Django应用程序(在Elastic Beanstalk上)使用Celery和RabbitMQ来管理后台任务,我使用Supervisor对其进行了守护.现在的问题是,我定义的一个期间任务失败了(在一周工作正常之后),我得到的错误是:
[01/Apr/2014 23:04:03] [ERROR] [celery.worker.job:272] Task clean-dead-sessions[1bfb5a0a-7914-4623-8b5b-35fc68443d2e] raised unexpected: WorkerLostError('Worker exited prematurely: signal 9 (SIGKILL).',)
Traceback (most recent call last):
File "/opt/python/run/venv/lib/python2.7/site-packages/billiard/pool.py", line 1168, in mark_as_worker_lost
human_status(exitcode)),
WorkerLostError: Worker exited prematurely: signal 9 (SIGKILL).
Run Code Online (Sandbox Code Playgroud)
由主管管理的所有流程都正常运行(supervisorctl status
RUNNNING说).
我尝试在ec2实例上读取几个日志,但似乎没有人帮我找出SIGKILL的原因.我该怎么办?我该如何调查?
这些是我的芹菜设置:
CELERY_TIMEZONE = 'UTC'
CELERY_TASK_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT = ['json']
BROKER_URL = os.environ['RABBITMQ_URL']
CELERY_IGNORE_RESULT = True
CELERY_DISABLE_RATE_LIMITS = False
CELERYD_HIJACK_ROOT_LOGGER = False
Run Code Online (Sandbox Code Playgroud)
这是我的supervisord.conf:
[program:celery_worker]
environment=$env_variables
directory=/opt/python/current/app
command=/opt/python/run/venv/bin/celery worker -A com.cygora -l info --pidfile=/opt/python/run/celery_worker.pid
startsecs=10
stopwaitsecs=60
stopasgroup=true
killasgroup=true
autostart=true
autorestart=true
stdout_logfile=/opt/python/log/celery_worker.stdout.log …
Run Code Online (Sandbox Code Playgroud) django amazon-ec2 celery supervisord amazon-elastic-beanstalk
我正在使用qunit(http://qunitjs.com)与Karma测试运行器(http://karma-runner.github.io/0.8/index.html)一起玩.我成功创建并运行了简单的测试(100%JavaScript),但现在我正在尝试使用HTML fixture来测试与DOM节点交互的代码.我可以通过这种方式在"文件"中声明它们来加载这些灯具:
{pattern: 'fixtures/myfixture.html', watched: true, served: true, included: false}
Run Code Online (Sandbox Code Playgroud)
它得到了karma的服务器,但我不明白我怎么能访问它的DOM :(
假设我的fixture是一个包含以下标记的简单html文件:
<div id="container">hello world</div>
Run Code Online (Sandbox Code Playgroud)
如何编写可以访问该节点(div)的测试?据我所知,"文档"与"静态"文件夹下的"context.html"文件有关...那么我的夹具的HTML在哪里?
我试图找出如何设置连接超时create_engine()
,到目前为止我已经尝试过:
create_engine(url, timeout=10)
Run Code Online (Sandbox Code Playgroud)
TypeError:使用配置PGDialect_psycopg2/QueuePool/Engine发送到create_engine()的无效参数'timeout'.请检查关键字参数是否适合此组件组合.
create_engine(url, connection_timeout=10)
Run Code Online (Sandbox Code Playgroud)
TypeError:使用配置PGDialect_psycopg2/QueuePool/Engine发送到create_engine()的无效参数'connection_timeout'.请检查关键字参数是否适合此组件组合.
create_engine(db_url, connect_args={'timeout': 10})
Run Code Online (Sandbox Code Playgroud)
(psycopg2.OperationalError)无效的连接选项"timeout"
create_engine(db_url, connect_args={'connection_timeout': 10})
Run Code Online (Sandbox Code Playgroud)
(psycopg2.OperationalError)无效的连接选项"connection_timeout"
create_engine(url, pool_timeout=10)
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
我正在努力弄清楚如何设置在Docker容器中运行的python应用程序(Flask)的远程调试.具体来说,我使用的是docker-compose,PyCharm professional和python 3.5.这是我到目前为止所做的:
我在wsgi.py文件中添加了以下行:
import sys sys.path.append('../ pycharm-debug-py3k.egg')import pydevd pydevd.settrace('0.0.0.0',port = 8200,stdoutToServer = True,stderrToServer = True)
我在PyCharm中创建了一个远程调试配置(通过将本地机器项目路径的路径映射到docker容器中的路径)
通过从PyCharm运行调试配置(单击错误图标),它打印(并挂起):
import sys
sys.path.append('../pycharm-debug-py3k.egg')
import pydevd
pydevd.settrace('0.0.0.0', port=8200, stdoutToServer=True, stderrToServer=True)
Run Code Online (Sandbox Code Playgroud)
...在docker容器日志中,我读到:
无法连接到0.0.0.0:4200
我该怎么办?(我的目标是能够在PyCharm中添加断点并停止执行docker容器应用程序以进行调试)
我想创建一个固定thead
和tfoot
可滚动的表tbody
!
我尝试了几种方法,包括CSS和CSS + Javascript,但它们都很弱且不可靠,我可以通过更改演示中的标记轻松打破它们.
我想要的是一种让表格像表格一样的方法,这意味着浏览器会根据内容(在窗口调整大小的情况下在页面加载时)自动调整列,在这些情况下:
如果列的header(thead > tr > th
)的内容大于列的body(tbody > tr > td
)的内容并且大于列的footer(tfoot > tr > td
)的内容,则列应根据列的标题大小调整大小
如果列的body(tbody > tr > td
)的内容大于列的header(thead > tr > th
)的内容并且大于列的footer(tfoot > tr > td
)的内容,则列应根据列的主体大小调整大小
如果列的footer(tfoot > tr > td
)的内容大于列的header(thead > tr > th
)的内容并且大于列的body(tbody > tr > td
)的内容,则列应根据列的页脚大小调整大小
在table
下面应澄清的情况:
<table>
<thead>
<tr> …
Run Code Online (Sandbox Code Playgroud) 在最近几周,我使用c#作为脚本语言使用Unity3d.我从来没有在c#和Unity3d之前使用过,我试图理解方法覆盖在Unity框架中是如何工作的.让我感到奇怪的是,我可以扩展基类MonoBehavior
并重写方法Start ()
,Update ()
等等,而不必使用override
关键字,编译器也不会抱怨它!相反,在"普通"C#程序中,我必须使用override
关键字,否则我会收到编译器警告.例如:
public class BaseClass {
public virtual void MyMethod () {
Console.WriteLine("BaseClass.MyMethod()");
}
}
public class SubClass : BaseClass {
public override void MyMethod () {
Console.WriteLine("SubClass.MyMethod()");
}
}
class Program {
static void Main () {
SubClass obj = new SubClass ();
obj.MyMethod ();
}
}
Run Code Online (Sandbox Code Playgroud)
而在Unity中,我可以简单地做到:
class PlayerController : MonoBehaviour {
void Update () {
// code...
}
}
Run Code Online (Sandbox Code Playgroud)
幕后发生了什么?团结是否利用"动态技巧"或什么?
我在Elastic Benastalk上部署了我的django应用程序,但我的命令失败了,我认为问题是django-admin.py不在$PYTHONPATH
,我想将我的应用程序添加到python路径,但我不知道EC2实例上的确切路径是什么.实际上我发现它:( /opt/python/bundle/3/app
我通过SSH使用"查找"命令)...但这是一个固定和可靠的路径?ps:WTF是那个"3"?(肯定不是我部署的版本或计数^ _ ^)
更新:
如果我cd /opt/python/bundle/3/app/myappname
并运行:
python manage.py shell
Run Code Online (Sandbox Code Playgroud)
我明白了:
File "manage.py", line 3, in <module>
from django.core.management import execute_from_command_line
ImportError: No module named django.core.management
Run Code Online (Sandbox Code Playgroud)
解决了!
Amazon Beanstalk使用virtualenv(就像我在本地做的那样),为了激活它你必须:
source /opt/python/run/venv/bin/activate
cd /opt/python/current/app
python manage.py commandname
Run Code Online (Sandbox Code Playgroud)
但是,为了使用自定义管理命令(这就是我需要访问我的EC2实例上的django shell的原因),你必须将你的应用程序添加到python路径以及你的应用程序使用的所有环境变量,所以我做:
vi /home/ec2-user/.bash_profile
Run Code Online (Sandbox Code Playgroud)
并补充说:
export PYTHONPATH=$PYTHONPATH:/opt/python/current/app
Run Code Online (Sandbox Code Playgroud)
和我的env变量......现在它有效!:)
为了自动激活virtualenv并且能够在通过ssh记录后立即使用django shell,是否可以添加:
source /opt/python/run/venv/bin/activate
cd /opt/python/current/app
Run Code Online (Sandbox Code Playgroud)
在.bash_profile :)
python django amazon-ec2 amazon-web-services amazon-elastic-beanstalk
在SQLAlchemy核心中使用"ORDER BY foo DESC"执行select语句的正确方法是什么?(核心,不是ORM!)
我目前order_by
直接包括方向:
mytable.select(order_by='name DESC')
Run Code Online (Sandbox Code Playgroud)
...它有效(虽然我不喜欢它,因为它有点"hackish"),但SQLAlchemy给了我以下警告:
SAWarning:无法解析标签引用'name DESC'; 转换为text()(10次出现后可能会抑制此警告)
util.ellipses_string(element.element))
(我在doc中没有找到任何相关内容)
我正在评估切换到ARC(自动引用计数)和重构以应用于我的代码.在我必须弄清楚的事情中,有这样的:
如果ARC不允许显式释放对象,我该怎么办didReceiveMemoryWarning?目前,我使用该方法释放属于我的控制器的对象,并且可以通过惰性getter轻松检索:
- (void)didReceiveMemoryWarning {
[_foo release]; _foo = nil;
[super didReceiveMemoryWarning];
}
Run Code Online (Sandbox Code Playgroud)
和相对懒惰的吸气剂:
- (Foo *)foo {
if (_foo) {
return _foo;
}
return (_foo = [[Foo alloc] init]);
}
Run Code Online (Sandbox Code Playgroud)
在ARC中实现这样的"模式"似乎是不可能的...所以,我该怎么办?在ARC中,didReceiveMemoryWarning应被视为"已弃用"/无用吗?
如何自动检索类命名空间?
魔术变量__NAMESPACE__
是不可靠的,因为在子类中它没有被正确定义.
例:
class Foo\bar\A
- > __NAMESPACE__
=== Foo\bar
class Ping\pong\B extends Foo\bar\A
- > __NAMESPACE__
=== Foo\bar(应该是Ping\pong)
ps:我注意到使用了相同的错误行为__CLASS__
,但我解决了使用get_called_class()
......有类似的东西get_called_class_namespace()
吗?我该如何实现这样的功能?
更新:
我认为解决方案是我自己的问题,因为我意识到get_called_class()
返回完全限定的类名,因此我可以从中提取命名空间:D ...无论如何,如果有更有效的方法让我知道;)
python ×4
amazon-ec2 ×2
django ×2
javascript ×2
sqlalchemy ×2
c# ×1
celery ×1
cocoa-touch ×1
css ×1
docker ×1
html ×1
html-table ×1
karma-runner ×1
objective-c ×1
oop ×1
php ×1
postgresql ×1
psycopg2 ×1
pycharm ×1
qunit ×1
supervisord ×1
tdd ×1
uikit ×1
unit-testing ×1