AWS Elasticbeanstalk 上的 Django:命令 02_createadmin 失败
Posted
技术标签:
【中文标题】AWS Elasticbeanstalk 上的 Django:命令 02_createadmin 失败【英文标题】:Django on AWS Elasticbeanstalk: Command 02_createadmin failed 【发布时间】:2014-03-08 07:54:07 【问题描述】:我正在尝试部署我的第一个 django 应用程序,并选择了带有弹性 beanstalk 的 AWS,因为这似乎是最直接的方法。我一直在犹豫不决地处理(过时的)official docs,但我完全无法尝试配置管理站点(第 7 步)。我也一直在使用this blog post 和随附的肉鸡板代码。 我正在使用 Python 2.7、Django 1.6.1、(本地)Windows 8 和 Powershell。
当我尝试部署我的应用程序时,我收到错误:
[实例:i-03f98f2d 模块:AWSEBAutoScalingGroup ConfigSet:null] 实例上的命令失败。返回代码:1 输出:构建期间发生错误:命令 02_createadmin 失败。
这是(我认为)日志的相关部分的样子,如果这还不够,我很乐意更新:
2014-02-10 19:07:17,373 [INFO] (25971 MainThread) [command.py-130] [root command execute] Command returned: (code: 1, stdout: Error occurred during build: Command 02_createadmin failed
, stderr: None)
2014-02-10 19:07:17,375 [DEBUG] (25971 MainThread) [commandWrapper.py-60] [root commandWrapper main] Command result: 'status': 'FAILURE', 'results': ['status': 'FAILURE', 'config_sets': ['Infra-WriteRuntimeConfig', 'Infra-WriteApplication1', 'Infra-WriteApplication2', 'Infra-EmbeddedPreBuild', 'Hook-PreAppDeploy', 'Infra-EmbeddedPostBuild', 'Hook-EnactAppDeploy', 'Hook-PostAppDeploy'], 'returncode': 1, 'events': [], 'msg': 'Error occurred during build: Command 02_createadmin failed\n'], 'api_version': '1.0'
...
2014-02-10 19:07:17,234 [DEBUG] Running command 02_createadmin
2014-02-10 19:07:17,235 [DEBUG] Generating defaults for command 02_createadmin
<<<
2014-02-10 19:07:17,319 [DEBUG] Running test for command 02_createadmin
2014-02-10 19:07:17,330 [DEBUG] Test command output:
2014-02-10 19:07:17,331 [DEBUG] Test for command 02_createadmin passed
2014-02-10 19:07:17,340 [ERROR] Command 02_createadmin (scripts/createadmin.py) failed
2014-02-10 19:07:17,341 [DEBUG] Command 02_createadmin output: /bin/sh: scripts/createadmin.py: Permission denied
2014-02-10 19:07:17,341 [ERROR] Error encountered during build of postbuild_0_legi_track_prod: Command 02_createadmin failed
Traceback (most recent call last):
File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 511, in run_config
CloudFormationCarpenter(config, self._auth_config).build(worklog)
File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 247, in build
changes['commands'] = CommandTool().apply(self._config.commands)
File "/usr/lib/python2.6/site-packages/cfnbootstrap/command_tool.py", line 113, in apply
raise ToolError(u"Command %s failed" % name)
ToolError: Command 02_createadmin failed
2014-02-10 19:07:17,342 [ERROR] Unhandled exception during build: Command 02_createadmin failed
Traceback (most recent call last):
File "/opt/aws/bin/cfn-init", line 122, in <module>
worklog.build(detail.metadata, configSets)
File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 117, in build
Contractor(metadata).build(configSets, self)
File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 502, in build
self.run_config(config, worklog)
File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 511, in run_config
CloudFormationCarpenter(config, self._auth_config).build(worklog)
File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 247, in build
changes['commands'] = CommandTool().apply(self._config.commands)
File "/usr/lib/python2.6/site-packages/cfnbootstrap/command_tool.py", line 113, in apply
raise ToolError(u"Command %s failed" % name)
ToolError: Command 02_createadmin failed
我的文件:
legi_track_prod.config:
container_commands:
01_syncdb:
command: "django-admin.py syncdb --noinput"
leader_only: true
02_createadmin:
command: "scripts/createadmin.py"
leader_only: true
03_collectstatic:
command: "django-admin.py collectstatic --noinput"
option_settings:
- namespace: aws:elasticbeanstalk:container:python
option_name: WSGIPath
value: legi_track_prod/wsgi.py
- namespace: aws:elasticbeanstalk:container:python:staticfiles
option_name: /static/
value: static/
- option_name: DJANGO_SETTINGS_MODULE
value: legi_track_prod.settings
- option_name: AWS_SECRET_KEY
value: key
- option_name: AWS_ACCESS_KEY_ID
value: key
/scripts/createadmin.py(我已经尝试了几个版本,但似乎都不起作用):
#!/usr/bin/env python
from django.contrib.auth.models import User
if User.objects.count() == 0:
admin = User.objects.create_superuser('admin', 'test@example.com', 'passwd')
admin.save()
也试过了:
#!/usr/bin/env python
from django.contrib.auth.models import User
if User.objects.count() == 0:
admin = User.objects.create(username='admin')
admin.set_password('admin')
admin.is_superuser = True
admin.is_staff = True
admin.save()
文件结构:
+---.ebextensions
+---.elasticbeanstalk
+---legi_track_prod
+---scripts
\---tracker
+---api
+---static
| \---tracker
\---templates
\---admin
我的尝试:
就像文档说的那样,我跑 chmod +x 脚本/createadmin.py 每次为了安全起见,我一直在这样做,我不知道重新保存它是否会覆盖现有权限。 我还尝试在 .config 文件中插入另一个命令来做同样的事情。我不确定这是否是问题,但有那条线 2014-02-10 19:07:17,341 [DEBUG] 命令 02_createadmin 输出:/bin/sh:scripts/createadmin.py:权限被拒绝 在日志中。
我已经看到了该行的几个不同版本: “#!/usr/bin/env python”在我的谷歌搜索中,并尝试将其更改为“#!/usr/bin/env/python”、“#!/usr/bin/env/python2.7”、“ #!/usr/bin/env python manage.py"等
在本地开发应用程序时,运行“syncdb”并响应提示会自动设置管理员用户。有没有办法让命令 01_syncdb 为我处理这个问题?
在完成本教程时,我确实跳过了 shell 中的一个步骤: 别名 eb="python2.7 ../AWS-ElasticBeanstalk-CLI-2.4.0/eb/linux/python2.7/eb" 我无法弄清楚该命令的 powershell 等效项,并且所有“eb init”和“eb start”命令都可以正常工作,而无需设置别名。我不认为这是问题所在,但我也不确定这条线的作用。
如果可以的话,我会跳过这一步,但我想不出任何其他方法来访问应用程序的数据库。我已经把头撞在这堵特殊的墙上大约两天了,非常感谢任何帮助。我不可能是唯一遇到此问题的人,但互联网向我揭示的所有问题/解决方案都是命令 01_syncdb 和 03_collectstatics 的问题/解决方案。关于如何让这个设置工作,或者(或者)在不编写管理员创建脚本的情况下获得任何建议?
更新
我正在准确地运行它,并且没有收到任何错误。该命令的文件路径看起来像是来自 git,所以我不确定它是否与 bash chmod 做同样的事情。谷歌搜索“powershell chmod”出现了一个相当复杂的解决方法,所以我会尝试一下。但是当我使用 GUI 查看文件的权限时,SYSTEM、admin 和普通用户(本地)都拥有 createadmin.py 的所有权限,所以我不是权限设置不正确,至少在本地是这样。我将尝试 chmod 的 powershell 版本,然后我猜想 ssh 进入 aws 服务器(我现在真的不知道该怎么做)并更新结果。
【问题讨论】:
您运行的是chmod +x scripts/createadmin.py
,还是等效的PowerShell?如果你正在运行它,它会给你一个错误吗?我倾向于认为它确实归结为该文件的权限,但由于我不太了解 PowerShell,我不知道它是否是导致您的问题的原因。
谢谢,我的回复对于 cmets 来说太长了,所以我在上面添加了。
【参考方案1】:
container_commands:
00_make_executable:
command: "chmod +x scripts/createadmin.py"
01_...
【讨论】:
我在发布之前尝试了类似的方法,但没有成功。我不确定相关的区别是什么(第一个命令上似乎没有“仅领导者”标签)但这有效,谢谢!以上是关于AWS Elasticbeanstalk 上的 Django:命令 02_createadmin 失败的主要内容,如果未能解决你的问题,请参考以下文章
带有 ALB 和 Socket.IO 的 AWS ElasticBeanstalk 上的 HTTP 400 错误
AWS ElasticBeanstalk 上的 Laravel 应用程序未连接到 RDS 数据库
AWS ElasticBeanStalk 上的解析服务器不会将 .mp4 PFFile 流式传输到 AVPlayer?
jac(jinja-assets-compressor)在 AWS elasticbeanstalk 上的烧瓶应用程序中不起作用