Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Heroku(Django)上redis_url的字符串而不是urlparse.ParseResult_Django_Heroku_Redis_Celery - Fatal编程技术网

Heroku(Django)上redis_url的字符串而不是urlparse.ParseResult

Heroku(Django)上redis_url的字符串而不是urlparse.ParseResult,django,heroku,redis,celery,Django,Heroku,Redis,Celery,非常感谢有经验的人在heroku上将redis配置为芹菜代理的django项目的后端。我的任务调度在localhost上运行良好,但我发现将其部署到heroku上确实令人沮丧: 目前我正在运行3个dynos,1个web,1个调度器和1个worker 我将redistogo插件添加到我的项目中。Redistogo设置为免费的nano计划,它为我提供了10个连接、1dB和5MB大小的实例 我遵循redistogo文档()来配置settings.py,或者也尝试实现解决方案的一个变体。都不是为我工作

非常感谢有经验的人在heroku上将redis配置为芹菜代理的django项目的后端。我的任务调度在localhost上运行良好,但我发现将其部署到heroku上确实令人沮丧:

  • 目前我正在运行3个dynos,1个web,1个调度器和1个worker
  • 我将redistogo插件添加到我的项目中。Redistogo设置为免费的nano计划,它为我提供了10个连接、1dB和5MB大小的实例
  • 我遵循redistogo文档()来配置settings.py,或者也尝试实现解决方案的一个变体。都不是为我工作。下面是我在settings.py中的内容:

     redis_url = os.environ.get('REDISTOGO_URL', 'http://localhost:6959')
    
     CACHES = {
            'default': {
            'BACKEND': 'redis_cache.RedisCache',,
            'LOCATION': '%s:%s' % (redis_url.hostname, redis_url.port),
            'OPTIONS': {
                'DB': 0,   # or 1?
                'PASSWORD': redis_url.password,
                #'PARSER_CLASS': 'redis.connection.HiredisParser'
            },
        },
     }
    
    CELERY_RESULT_BACKEND = redis_url
    BROKER_URL = 'redis://localhost:6959/0'
    
以下是我尝试运行应用程序时的heroku日志:

2013-07-11T12:16:10.998516+00:00 app[web.1]:     apps = settings.INSTALLED_APPS
2013-07-11T12:16:10.998516+00:00 app[web.1]:     mod = importlib.import_module(self.SETTINGS_MODULE)
2013-07-11T12:16:10.998263+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
2013-07-11T12:16:10.998263+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 263, in fetch_command
2013-07-11T12:16:10.998516+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/conf/__init__.py", line 53, in __getattr__
2013-07-11T12:16:10.998516+00:00 app[web.1]:     self._setup(name)
2013-07-11T12:16:10.998516+00:00 app[web.1]:     self._wrapped = Settings(settings_module)
2013-07-11T12:16:10.998516+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/conf/__init__.py", line 132, in __init__
2013-07-11T12:16:10.998516+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
2013-07-11T12:16:10.998516+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/conf/__init__.py", line 48, in _setup
2013-07-11T12:16:10.998712+00:00 app[web.1]:     'LOCATION': '%s:%s' % (redis_url.hostname, redis_url.port),
2013-07-11T12:16:10.998712+00:00 app[web.1]: AttributeError: 'str' object has no attribute 'hostname'
2013-07-11T12:16:12.201202+00:00 heroku[web.1]: Process exited with status 1
2013-07-11T12:16:12.250743+00:00 heroku[web.1]: State changed from starting to crashed
如何将redis_url视为URI而不是str

我的文件:

web: python manage.py run_gunicorn -b 0.0.0.0:$PORT -w 3 --log-level info
scheduler: python manage.py celeryd -B -E
worker: python manage.py celeryd -E -B --loglevel=INFO

在需求中,我有django redis cache==0.10.0、redis==2.7.6、django Cellery==3.0.17、Cellery Cellery==3.0.20和kombu==2.5.12

看起来像是
os.environ.get
正在返回字符串(或者
str
?不熟悉python),您希望它更像一个URI对象之类的东西。普通python字符串是否响应像
hostname
这样的方法

还有这个步骤:


redis=redis.from_url(redis_url)


它将字符串解析为redis对象。

看起来像是
os.environ.get
返回一个字符串(或者
str
?不熟悉python),您希望它更像一个URI对象或其他东西。普通python字符串是否响应像
hostname
这样的方法

还有这个步骤:


redis=redis.from_url(redis_url)


这会将字符串解析为redis对象。

我对我的解决方案不太满意,但我硬编码了redistogo主机名、端口和密码,现在一切都顺利运行。

我对我的解决方案不太满意,但我硬编码了redistogo主机名,端口和密码,现在一切都正常运行。

使用python库。它将URL解析为组件

redis_url = os.environ.get('REDISTOGO_URL', 'http://localhost:6959')    
redis_url = urlparse.urlparse(redis_url)
使用python库。它将URL解析为组件

redis_url = os.environ.get('REDISTOGO_URL', 'http://localhost:6959')    
redis_url = urlparse.urlparse(redis_url)

谢谢-我同意您的评估,它将uri解析为str(字符串),这不会接受这样的方法。我最终选择了硬编码缓存值的黑客解决方案,现在redis在我的项目中运行良好。谢谢-我同意你的评估,它将uri解析为str(字符串),这不会接受这样的方法。我最终选择了硬编码缓存值的黑客解决方案,现在redis在我的项目中运行良好。