2012-07-09 75 views
1

我试图设置Amazon S3以用于Heroku上我的第一个Django应用程序上的静态和媒体文件。该过程进行得非常顺利,但运行./manage.py collectstatic我的静态文件复制到AS3桶的时候,我收到以下错误:迄今为Heroku设置AS3; sendgrid的collectstatic错误

File "manage.py", line 12, in <module> 
    import settings 
    File "/Users/me/djangoprojects/project/project/settings.py", line 165, in <module> 
    EMAIL_HOST_USER = os.environ['SENDGRID_USERNAME'] 
    File "/Users/me/djangoprojects/env/bin/../lib/python2.7/UserDict.py", line 23, in __getitem__ 
    raise KeyError(key) 
    KeyError: 'SENDGRID_USERNAME' 

为sendgrid的设置工作了部署:

EMAIL_HOST = 'smtp.sendgrid.net' 
EMAIL_HOST_USER = os.environ['SENDGRID_USERNAME'] 
EMAIL_HOST_PASSWORD = os.environ['SENDGRID_PASSWORD'] 
EMAIL_PORT = 587 
EMAIL_USE_TLS = True 

我不确定的是什么问题,因为文件不会被复制到AS3桶因这个错误。任何洞察力或经验大受赞赏。

回答

1

您需要在编译期间启用环境变量。检查出the heroku docs(向下滚动到“生成过程中配置变量”部分)。

对于懒惰:

heroku labs:enable user_env_compile -a myapp 
+0

好的,这听起来像是问题所在。我运行该命令,并且在尝试收集静态时仍然出现错误。还应该设置其他的东西吗?我已经阅读了文档,没有任何东西可以解决问题。我应该再推一个新版本到Heroku再试> – 2012-07-09 04:10:50

+0

我把修改后的主人推到了Heroku,我仍然得到同样的错误。真的很困惑。 – 2012-07-09 05:14:36

+0

你可能想尝试两件事:1)在导致问题的代码之前查看是否真的设置了env变量。 2)如果变量未定义,则使用'os.environ.get'或'os.getenv',默认为None。 – Swift 2012-07-10 14:40:13

0

我被具有相同误差部署具有Sendgrid一个Django应用到的Heroku评论的应用程序。我们的配置是在GitHub上打开一个新PR时启动一个评论应用程序。

原来的问题是,在app.json中的Sendgrid配置被添加到预先存在的PR中,该PR没有触发新应用程序的生成。至少Heroku查看应用程序,附加组件仅在第一次部署应用程序时生成。因此,Heroku评论应用程序没有Sendgrid附加组件,并且失败。

解决方案是检查另一个分支,推到GitHub,并从头开始生成一个新的审查应用程序。