我的烧瓶应用程序由四个容器组成:Web应用程序,postgres,rabbitMQ和Celery。由于我有定期运行的芹菜任务,因此我使用的是芹菜节拍。我已经像这样配置了docker-compose文件:
version: '2'
services:
rabbit:
# ...
web:
# ...
rabbit:
# ...
celery:
build:
context: .
dockerfile: Dockerfile.celery
Run Code Online (Sandbox Code Playgroud)
我的Dockerfile.celery看起来像这样:
# ...code up here...
CMD ["celery", "-A", "app.tasks.celery", "worker", "-B", "-l", "INFO"]
Run Code Online (Sandbox Code Playgroud)
当我在文档中阅读到我不应该使用该-B选项进行生产时,无论如何我还是匆忙添加了该选项(并忘记了对其进行更改),并很快了解到我的计划任务正在运行多次。对于那些感兴趣的人,如果您ps aux | grep celery在celery容器中执行a操作,则会看到多个celery + beat进程正在运行(但是应该只有一个Beat进程,但是应该有许多worker进程)。从文档中我不确定为什么不应该-B在生产环境中运行,但是现在我知道了。
所以然后我将Dockerfile.celery更改为:
# ...code up here...
CMD ["celery", "-A", "app.tasks.celery", "worker", "-l", "INFO"]
CMD ["celery", "-A", "app.tasks.celery", "beat", "-l", "INFO"]
Run Code Online (Sandbox Code Playgroud)
不,当我启动我的应用程序时,工作进程启动,但节拍没有启动。当我翻转这些命令时,将首先调用beat,然后启动beat,但不会启动工作进程。所以我的问题是:如何在容器中运行芹菜工作者+一起殴打?我已经梳理了许多文章/文档,但仍然无法弄清楚。
已编辑
我将Dockerfile.celery更改为以下内容:
ENTRYPOINT [ "/bin/sh" ]
CMD [ "./docker.celery.sh" ]
Run Code Online (Sandbox Code Playgroud)
我的docker.celery.sh文件如下所示:
#!/bin/sh -ex
celery -A …Run Code Online (Sandbox Code Playgroud) 出于某种原因,我ModuleNotFoundError: No module named 'gitlab'在安装 python-gitlab 后遇到了这个错误。我是通过...安装的
source venv/bin/activatesudo pip install --upgrade python-gitlab (根据 python-gitlab 文档)pip install python-gitlab(在之前的 pip 卸载之后)pip freeze > requirements.txtimport gitlab在我的页面顶部安装后的输出是...
Collecting python-gitlab
Requirement not upgraded as not directly required: six in ./venv/lib/python3.6/site-packages (from python-gitlab) (1.11.0)
Requirement not upgraded as not directly required: requests>=2.4.2 in ./venv/lib/python3.6/site-packages (from python-gitlab) (2.13.0)
Installing collected packages: python-gitlab
Successfully installed python-gitlab-1.5.1
Run Code Online (Sandbox Code Playgroud)
我正在使用 Python 3.6.4。我究竟做错了什么?
我有一个通过 AWS CloudFront 提供服务的网站。我在我的 nginx 日志中收到了大量类似这样的条目:
nginx_1 | 103.241.51.144 - - [09/Aug/2020:16:03:08 +0000] "GET /mysql/admin/index.php HTTP/1.1" 200 2311 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0" "-"
nginx_1 | 195.54.160.21 - - [09/Aug/2020:16:20:26 +0000] "GET /?XDEBUG_SESSION_START=phpstorm HTTP/1.1" 200 2311 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36" "-"
nginx_1 | 172.93.99.2 - - [09/Aug/2020:17:23:44 +0000] "POST /boaform/admin/formLogin HTTP/1.1" 405 157 "http://52.xxx.xx.xx:80/admin/login.asp" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0" "-"
nginx_1 | 172.93.99.2 …Run Code Online (Sandbox Code Playgroud) 我正在尝试让我的 IoT 设备启动 Lambda 函数。尝试了几个小时没有成功。
我的 lambda 函数很简单:
exports.handler = async (event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify(event.message),
};
return response;
};
Run Code Online (Sandbox Code Playgroud)
我已经设置了 IoT 规则来触发 lambda 函数SELECT * FROM 'iot/trigger-lambda'。当我从 AWS IoT 的测试功能向主题发布消息时iot/trigger-lambda,lambda 函数会成功触发。但是,当我从设备发布消息时,出现以下错误:
{
"ruleName": "ruleTriggerLambda",
"topic": "iot/trigger-lambda",
"cloudwatchTraceId": "xxx-yyy-zzz",
"clientId": "ABC123",
"base64OriginalPayload": "eydvcGVyYGTpb24nOiAncHV0T2JqZWN0JywgJ2J1Y2tldCc6ICdyZWR3YXZlLWFwcC1kZXYnLCAna2V5JzogJ3JlYWNoYmFjay56aXAnLQWncmVwbHlUbyc6ICdpb3QvdGhyGHT0aWQtMDAwMS9wcmUtc2lnbmVkLBNzLXVybC1yBBNwb25zZXMnfSBbMV0=",
"failures": [
{
"failedAction": "LambdaAction",
"failedResource": "arn:aws:lambda:us-east-1:xxx:function:lambdaTriggerLambda",
"errorMessage": "Failed to invoke lambda function. Received Server error from Lambda. The error code is 400"
} …Run Code Online (Sandbox Code Playgroud) 我通过 AWS 无服务器应用程序模型 (SAM) 部署 AWS Lambda。我的一个 Lambda 函数使用 Numpy,我通过 @keithRozario 从 Klayers 的第 3 方层引用了它。我正在使用 Klayers-python38-numpy:16 但发现它在我今天部署后已被弃用,这使我的堆栈处于UPDATE_ROLLBACK_FAILED状态。
Stack actions -> Continue update rollback一项建议是从 AWS 控制台使用;我尝试过但没有成功。另一种解决方案是删除堆栈。但是,这将是我第一次删除堆栈,我想知道的是: 如果我通过控制台删除堆栈,当我重新部署它时,我的堆栈会被重新创建吗?我已经寻找了我的问题的答案,但我只找到了删除堆栈中资源的参考。
我还想知道的是,我的堆栈是 AWS CodePipeline 中许多堆栈中的第一个堆栈,如果我删除堆栈,我的管道仍然可以工作吗?此外,当我继续处理管道中的后续堆栈时,我还会遇到失败的堆栈吗?
最后,计划是在重新部署时更新到 Klayers-python38-numpy:19。
编辑:根据@marcin
问题是已经部署在我的堆栈中的 Klayers-python38-numpy:16 不再可用。今天早上我尝试对代码进行更改,但我的管道在该CreateChangeSet步骤中失败了。我假设,该层不再可用的事实是我的堆栈无法回滚的原因。
我的管道如下所示:
{
"pipeline": {
"name": "my-pipeline",
"roleArn": "arn:aws:iam::123456789:role/my-pipeline-CodePipelineExecutionRole-4O8PAUJGLXYZ",
"artifactStore": {
"type": "S3",
"location": "my-pipeline-buildartifactsbucket-62byf2xqaa8z"
},
"stages": [
{
"name": "Source",
"actions": [
{
"name": "SourceCodeRepo",
"actionTypeId": {
"category": "Source",
"owner": "ThirdParty",
"provider": "GitHub",
"version": "1" …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Cognito 在我的 Flutter 应用程序中实现身份验证。我正在对现有的 userPool 进行身份验证,去年我在我的 React 应用程序中成功使用了该 userPool。
但是,使用 Flutter 我无法获取用户的会话。我能够成功登录,但无法使用该fetchAuthSession()方法获取任何令牌。知道为什么会发生这种情况吗?这是我的一些工作和非工作代码:
这段代码成功了...
Future _usersEmail() async {
try {
var attributes = (await Amplify.Auth.fetchUserAttributes()).toList();
for (var attribute in attributes) {
if (attribute.userAttributeKey == 'email') {
print("user's email is ${attribute.value}");
return '${attribute.value}';
}
}
return 'no email';
} on AuthException catch (e) {
return '${e.message}';
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码也成功了...
Future<bool> _isSignedIn() async {
final CognitoAuthSession session =
await Amplify.Auth.fetchAuthSession() as CognitoAuthSession;
print('_isSignedIn: ${session.isSignedIn}');
return session.isSignedIn;
}
Run Code Online (Sandbox Code Playgroud)
这段代码返回空...
Future _getIdToken() …Run Code Online (Sandbox Code Playgroud) 我们有一个3节点的副本集,它会定期崩溃并无法恢复.通过我们的PRIMARY服务器的mongod.log文件,我看到了多个错误.我不知道从哪里开始,甚至在这篇文章中包括什么,但我会从我收到的错误开始.如果我遗失了什么,请告诉我,我会编辑帖子并加入.任何人都可以解释为什么会这样吗?
Thu Feb 27 14:09:47.790 [rsSyncNotifier] replset tracking exception: exception: 10278 dbclient error communicating with server: mongos2i.hostname.com:27017
Thu Feb 27 14:09:47.790 [rsBackgroundSync] replSet sync source problem: 10278 dbclient error communicating with server: mongos2i.hostname.com:27017
Thu Feb 27 14:09:47.790 [rsBackgroundSync] replSet syncing to: mongos2i.hostname.com:27017
Thu Feb 27 14:09:47.791 [rsBackgroundSync] repl: couldn't connect to server mongos2i.hostname.com:27017
Thu Feb 27 14:09:47.792 [conn152] end connection xx.xxx.xxx.107:43904 (71 connections now open)
Thu Feb 27 14:09:48.077 [rsHealthPoll] DBClientCursor::init call() failed
Thu Feb 27 14:09:48.077 [rsHealthPoll] replset info …Run Code Online (Sandbox Code Playgroud) 我了解 Cognito 的各种多租户方法,并且我在心里致力于每个租户 xe2x80x9d 方法的 xe2x80x9cone 用户池。因此,例如,我们的 AWS 帐户将为租户 A 提供租户_a_user_pool,为租户 B 提供租户_b_user_pool,等等。但是,现在我\xe2\x80\x99m 已准备好实施此方法,我\xe2\x80\x99m 开始拥有第二个我的想法和我\xe2\x80\x99m 想知道我是否可以使用一个用户池做一些更简单的事情,同时仍然实现我的目标,即:安全性和灵活性
\n关于安全性,我\xe2\x80\x99ve 做出了这样的假设:通过用户池分隔用户本质上更安全,这仅仅是因为用户分隔的本质。所以,我的第一个问题是:
\n至于灵活性,每个租户拥有 \xe2\x80\x9cone 用户池\xe2\x80\x9d 将允许为租户 A 配置 SAML 身份验证,而租户 B 可能会选择其他身份验证方法,例如针对其用户池使用 un/pw 进行身份验证。或者,租户 C 可以打开 MFA,而租户 D 可能会将其关闭。虽然我不怀疑这种方法是否灵活,但我开始怀疑它是否太复杂以及我是否可以使用一个用户池实现相同的目的?
\n如果我为所有用户使用一个用户池,我正在考虑这样的方法:
\n\n在上面的模型中,I\xe2\x80\x99 添加了一个关联表,tenant_users,因为在使用一组登录凭据时可能需要让用户成为多个租户的一部分(类似于 Slack,I\xe2\x80 \x99d 说)。但是,如果我采用这种方法,我就会开始怀疑灵活性。例如,我仍然可以让租户 A 使用 SAML 而租户 B 使用其他身份验证方法吗? 如果您注意到租户表中,我\xe2\x80\x99添加了一个 auth_methods 列,它将存储租户首选的身份验证方法。I\xe2\x80\x99m 希望我可以在 Cognito 触发器调用的 lambda 中添加各种身份验证方法的身份验证逻辑。但是,我\xe2\x80\x99m进入了陌生的领域,所以我\xe2\x80\x99不知道\xe2\x80\x99可能或不可能。
\n回顾一下,我的问题是\xe2\x80\xa6
\npython ×2
amazon-waf ×1
aws-amplify ×1
aws-iot ×1
aws-lambda ×1
bots ×1
celery ×1
celerybeat ×1
docker ×1
flask ×1
flutter ×1
gitlab ×1
mongodb ×1
multi-tenant ×1
nginx ×1
spam ×1