在Heroku w / Django上Memcached:无法安装pylibmc / memcacheify

时间:2012-07-16 15:37:53

标签: django heroku memcached libmemcached

我花了很多时间在这上面,这显然超出了我的新手理解/技能。我尝试使用pip install安装django-heroku-memcacheify,这会引发错误。我将问题追踪到pylibmc,这导致了所有问题。这是错误日志的一个有趣部分:

_pylibmcmodule.h:42:36:错误:libmemcached / memcached.h:没有这样的文件或     目录

这是(几乎)完整的追溯:

-----> Heroku receiving push
-----> Fetching custom buildpack... done
-----> Python app detected
-----> Preparing Python interpreter (2.7.2)
-----> Creating Virtualenv version 1.7.2
 !     CLEAN_VIRTUALENV set, rebuilding virtualenv.
       Running virtualenv with interpreter /usr/local/bin/python2.7
       New python executable in .heroku/venv/bin/python2.7
       Not overwriting existing python script .heroku/venv/bin/python (you must
use .heroku/venv/bin/python2.7)
       Installing         distribute..................................................................................................................................................................................................done.
   Installing pip................done.
-----> Activating virtualenv
-----> Installing dependencies using pip version 1.1
       Requirement already satisfied (use --upgrade to upgrade): Django==1.4 in
./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 2))
       Requirement already satisfied (use --upgrade to upgrade): gunicorn==0.14.3 in     ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line   3))
       Requirement already satisfied (use --upgrade to upgrade): PIL==1.1.7 in    ./.heroku/venv/lib/python2.7/site-packages/PIL (from -r requirements/common.txt (line 4))
       Requirement already satisfied (use --upgrade to upgrade): South==0.7.5 in    ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 5))
       Requirement already satisfied (use --upgrade to upgrade): boto==2.1.1 in
./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 6))
       Downloading/unpacking distribute==0.6.10 (from -r requirements/common.txt (line 7))
         Using download cache from /app/tmp/repo.git/.cache/pip_downloads/http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fd%2Fdistribute%2Fdistribute-0.6.10.tar.gz
         Running setup.py egg_info for package distribute

       Requirement already satisfied (use --upgrade to upgrade): python-dateutil==1.5 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 8))
       Requirement already satisfied (use --upgrade to upgrade): six==1.1.0 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 9))
       Requirement already satisfied (use --upgrade to upgrade): django-appconf==0.5 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 10))
       Requirement already satisfied (use --upgrade to upgrade): dj-database-url==0.2.0 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 11))
       Downloading/unpacking django-compressor==dev (from -r requirements/common.txt (line 12))
         Using download cache from /app/tmp/repo.git/.cache/pip_downloads/http%3A%2F%2Fgithub.com%2Fjezdez%2Fdjango_compressor%2Ftarball%2Fdevelop
         Cannot determine compression type for file /app/tmp/repo.git/.cache/pip_downloads/http%3A%2F%2Fgithub.com%2Fjezdez%2Fdjango_compressor%2Ftarball%2Fdevelop
         Running setup.py egg_info for package django-compressor

         Requested django-compressor==dev (from -r requirements/common.txt (line 12)), but installing version 1.2a2
       Requirement already satisfied (use --upgrade to upgrade): django-crispy-forms==1.1.2 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 13))
       Requirement already satisfied (use --upgrade to upgrade): django-extensions==0.9 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 14))
       Requirement already satisfied (use --upgrade to upgrade): django-facebook==4.0.9 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 15))
       Requirement already satisfied (use --upgrade to upgrade): django-floppyforms==1.0 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 16))
       Requirement already satisfied (use --upgrade to upgrade): django-guardian==1.0.4 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 17))
       Requirement already satisfied (use --upgrade to upgrade): django-image-cropping==0.5 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 18))
       Requirement already satisfied (use --upgrade to upgrade): django-ratings==0.3.6 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 19))
       Requirement already satisfied (use --upgrade to upgrade): django-smuggler==0.3 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 20))
       Requirement already satisfied (use --upgrade to upgrade): django-storages==1.1.4 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 21))
       Requirement already satisfied (use --upgrade to upgrade): django-subdomains==1.2.1 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 22))
       Requirement already satisfied (use --upgrade to upgrade): django-s3-folder-storage==0.1 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 23))
       Requirement already satisfied (use --upgrade to upgrade): django-userena==1.1.0 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 24))
       Requirement already satisfied (use --upgrade to upgrade): Whoosh==2.4.0 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 25))
       Requirement already satisfied (use --upgrade to upgrade): brabeion==0.1 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 26))
       Requirement already satisfied (use --upgrade to upgrade): versiontools==1.9.1 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 27))
       Obtaining django-haystack from git+https://github.com/toastdriven/django-haystack.git@25bd361d3c64cc22a1090a5053465939647d973d#egg=django_haystack-dev (from -r requirements/common.txt (line 28))
         Updating ./.heroku/src/django-haystack clone (to 25bd361d3c64cc22a1090a5053465939647d973d)
         Could not find a tag or branch '25bd361d3c64cc22a1090a5053465939647d973d', assuming commit.
         Running setup.py egg_info for package django-haystack

       Obtaining django-taggit from git+git://github.com/shacker/django-taggit.git@7987beaf357f8d3621c7fbce3b6753dd21962ee7#egg=django_taggit-dev (from -r requirements/common.txt (line 29))
         Updating ./.heroku/src/django-taggit clone (to 7987beaf357f8d3621c7fbce3b6753dd21962ee7)
         Could not find a tag or branch '7987beaf357f8d3621c7fbce3b6753dd21962ee7', assuming commit.
         Running setup.py egg_info for package django-taggit

       Obtaining django-generic-aggregation from git+git://github.com/coleifer/django-generic-aggregation.git@c76408c2c002dcab6bfc3148760ee58a19cbe05e#egg=django_generic_aggregation-dev (from -r requirements/common.txt (line 30))
         Updating ./.heroku/src/django-generic-aggregation clone (to c76408c2c002dcab6bfc3148760ee58a19cbe05e)
         Could not find a tag or branch 'c76408c2c002dcab6bfc3148760ee58a19cbe05e', assuming commit.
         Running setup.py egg_info for package django-generic-aggregation

       Requirement already satisfied (use --upgrade to upgrade): easy-thumbnails==1.0.3 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 31))
       Requirement already satisfied (use --upgrade to upgrade): docutils==0.9 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 32))
       Requirement already satisfied (use --upgrade to upgrade): httplib2==0.7.4 in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt
(line 33))
       Requirement already satisfied (use --upgrade to upgrade): reportlab==2.5
in ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/common.txt (line 34))
       Requirement already satisfied (use --upgrade to upgrade): wsgiref==0.1.2
in /usr/local/lib/python2.7 (from -r requirements/common.txt (line 35))
       Downloading/unpacking django-pylibmc-sasl==0.2.4 (from -r requirements/prod.txt (line 3))
         Downloading django-pylibmc-sasl-0.2.4.tar.gz
         Storing download in cache at /app/tmp/repo.git/.cache/pip_downloads/http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fd%2Fdjango-pylibmc-sasl%2Fdjango-pylibmc-sasl-0.2.4.tar.gz
         Running setup.py egg_info for package django-pylibmc-sasl

       Requirement already satisfied (use --upgrade to upgrade): psycopg2==2.4.5 in     ./.heroku/venv/lib/python2.7/site-packages (from -r requirements/prod.txt (line 4))
       Downloading/unpacking pylibmc==1.2.3 (from -r requirements/prod.txt (line 5))
         Storing download in cache at /app/tmp/repo.git/.cache/pip_downloads/http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fp%2Fpylibmc%2Fpylibmc-1.2.3.tar.gz
         Running setup.py egg_info for package pylibmc

       Downloading/unpacking django-heroku-memcacheify==0.3 (from -r requirements/prod.txt (line 6))
         Downloading django-heroku-memcacheify-0.3.tar.gz
         Storing download in cache at /app/tmp/repo.git/.cache/pip_downloads/http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fd%2Fdjango-heroku-memcacheify%2Fdjango-heroku-memcacheify-0.3.tar.gz
         Running setup.py egg_info for package django-heroku-memcacheify

   Installing collected packages: distribute, django-compressor, django-haystack, django-taggit, django-generic-aggregation, django-pylibmc-sasl, pylibmc, django-heroku-memcacheify
     Found existing installation: distribute 0.6.27
       Uninstalling distribute:
         Successfully uninstalled distribute
     Running setup.py install for distribute
       Before install bootstrap.
       Scanning installed packages
       Setuptools installation detected at /tmp/build_vk3edwx3xe4q/.heroku/venv/lib/python2.7/site-packages
       Non-egg installation
       Removing elements out of the way...
       Already patched.
       /tmp/build_vk3edwx3xe4q/.heroku/venv/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info already patched.

       Installing easy_install script to /tmp/build_vk3edwx3xe4q/.heroku/venv/bin
       Installing easy_install-2.7 script to /tmp/build_vk3edwx3xe4q/.heroku/venv/bin
       After install bootstrap.
       /tmp/build_vk3edwx3xe4q/.heroku/venv/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info already exists
     Found existing installation: django-compressor 1.2a2
       Uninstalling django-compressor:
         Successfully uninstalled django-compressor
     Running setup.py install for django-compressor

     Running setup.py develop for django-haystack

       Creating /tmp/build_vk3edwx3xe4q/.heroku/venv/lib/python2.7/site-packages/django-haystack.egg-link (link to .)
       django-haystack 2.0.0-beta is already the active version in easy-install.pth

       Installed /tmp/build_vk3edwx3xe4q/.heroku/src/django-haystack
     Running setup.py develop for django-taggit

       Creating /tmp/build_vk3edwx3xe4q/.heroku/venv/lib/python2.7/site-packages/django-taggit.egg-link (link to .)
       django-taggit 0.9.4 is already the active version in easy-install.pth

       Installed /tmp/build_vk3edwx3xe4q/.heroku/src/django-taggit
     Running setup.py develop for django-generic-aggregation

       Creating /tmp/build_vk3edwx3xe4q/.heroku/venv/lib/python2.7/site-packages/django-generic-aggregation.egg-link (link to .)
       django-generic-aggregation 0.3.1 is already the active version in easy-install.pth

       Installed /tmp/build_vk3edwx3xe4q/.heroku/src/django-generic-aggregation
     Running setup.py install for django-pylibmc-sasl

     Running setup.py install for pylibmc
       building '_pylibmc' extension
       gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DUSE_ZLIB -I/usr/local/include/python2.7 -c _pylibmcmodule.c -o build/temp.linux-x86_64-2.7/_pylibmcmodule.o -fno-strict-aliasing
       In file included from _pylibmcmodule.c:34:
       _pylibmcmodule.h:42:36: error: libmemcached/memcached.h: No such file or directory
           _pylibmcmodule.c: In function â?~init_pylibmcâ?T:
           _pylibmcmodule.c:2140: error: â?~LIBMEMCACHED_VERSION_STRINGâ?T undeclared  (first use in this function)
           _pylibmcmodule.c:2140: warning: passing argument 3 of â?~PyModule_AddStringConstantâ?T from incompatible pointer type
       /usr/local/include/python2.7/modsupport.h:42: note: expected â?~const char *â?T but argument is of type â?~struct PylibMC_Behavior *â?T
       error: command 'gcc' failed with exit status 1
       Complete output from command /tmp/build_vk3edwx3xe4q/.heroku/venv/bin/python2.7 -c "import setuptools;__file__='/tmp/build_vk3edwx3xe4q/.heroku/venv/build/pylibmc/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /tmp/pip-Y7MRuY-record/install-record.txt --install-headers /tmp/build_vk3edwx3xe4q/.heroku/venv/include/site/python2.7:
       running install

   running build

   running build_py

   creating build

   creating build/lib.linux-x86_64-2.7

   creating build/lib.linux-x86_64-2.7/pylibmc

   copying pylibmc/__main__.py -> build/lib.linux-x86_64-2.7/pylibmc

   copying pylibmc/pools.py -> build/lib.linux-x86_64-2.7/pylibmc

   copying pylibmc/__init__.py -> build/lib.linux-x86_64-2.7/pylibmc

   copying pylibmc/client.py -> build/lib.linux-x86_64-2.7/pylibmc

   copying pylibmc/consts.py -> build/lib.linux-x86_64-2.7/pylibmc

   copying pylibmc/test.py -> build/lib.linux-x86_64-2.7/pylibmc

   running build_ext

   building '_pylibmc' extension

   creating build/temp.linux-x86_64-2.7

   gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DUSE_ZLIB -I/usr/local/include/python2.7 -c _pylibmcmodule.c -o build/temp.linux-x86_64-2.7/_pylibmcmodule.o -fno-strict-aliasing

   In file included from _pylibmcmodule.c:34:

   _pylibmcmodule.h:42:36: error: libmemcached/memcached.h: No such file or
directory

   In file included from _pylibmcmodule.c:34:

   _pylibmcmodule.h:75: error: expected declaration specifiers or â?~...â?T before â?~*â?T token

...Lots of errors...

   _pylibmcmodule.c: In function â?~init_pylibmcâ?T:

   _pylibmcmodule.c:2140: error: â?~LIBMEMCACHED_VERSION_STRINGâ?T undeclared (first use in this function)

   _pylibmcmodule.c:2140: warning: passing argument 3 of â?~PyModule_AddStringConstantâ?T from incompatible pointer type

   /usr/local/include/python2.7/modsupport.h:42: note: expected â?~const char *â?T but argument is of type â?~struct PylibMC_Behavior *â?T

   error: command 'gcc' failed with exit status 1

   ----------------------------------------
   Command /tmp/build_vk3edwx3xe4q/.heroku/venv/bin/python2.7 -c "import setuptools;__file__='/tmp/build_vk3edwx3xe4q/.heroku/venv/build/pylibmc/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /tmp/pip-Y7MRuY-record/install-record.txt --install-headers /tmp/build_vk3edwx3xe4q/.heroku/venv/include/site/python2.7 failed with error code 1 in /tmp/build_vk3edwx3xe4q/.heroku/venv/build/pylibmc
   Storing complete log in /app/.pip/pip.log
 !     Heroku push rejected, failed to compile Python app

To git@heroku.com:crowdcademy.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:crowdcademy.git'

所以这是交易

我无法在我的本地环境中测试它b / c我在一块垃圾上运行。但是从我所读到的libmemcached来看,我是already installed。没有其他人似乎有任何pylibmc的问题,因为我在谷歌上找不到任何东西。他们正在谈论In this post

  

如果他们发现你正在加载pylibmc,他们将会自助运行   libmemcached为你

这可能是问题,要么没有提供,要么路径错误。任何帮助表示赞赏!如果这不成功我将不得不使用Redis,这似乎更难......不知道我是否足够先进。

修改 可能无关紧要,但我正在使用带有init而不是settings.py文件的设置文件夹。我听说这会导致一些奇怪的行为,因为heroku并不总是记得这是可能的。

修改2

由于有数百人在heroku上运行memcached和django而没有任何问题,我不认为heroku用户应该安装带有某种黑客的libmemcached。当heroku在你的需求文件中检测到pylibmc时,文档会谈论它就好像它是为你引导的。这导致我得出结论: A)我的设置或我使用的其中一个应用中出现了问题,或者 B) heroku最近改变了一些内容并打破了自动为django引导libmemcached。我尝试使用heroku配置进行全新安装:添加CLEAN_VIRTUALENV = true但that's not working either right now。我希望它是 A 并且有人遇到了同样的问题。如果它是 B 我不知道如何解决它。

4 个答案:

答案 0 :(得分:31)

我和Heroku的友好人员谈过,看起来我的requirements.txt设置造成了所有的破坏。不要在root中使用从其他需求文件导入的需求文件!至少对于pylibmc不起作用,因为如果根要求文件中没有pylibmc的显式行,则libmemcached不会被引导。我希望这会帮助别人避免浪费我花在这个问题上的10小时。好极了!

答案 1 :(得分:10)

您需要安装libmemcached

你不需要开发标题或任何东西,常规标题就足够了!

如果无法安装libmemcached,则无法安装pylibmc。对此感到抱歉,但没有太多事可做。

有一种方法可以解决这个问题,但这是一个垃圾想法,所以如果你想要详细信息请给我留言。

答案 2 :(得分:4)

你有没有试过像libmemcached-dev,memcached-dev这样的东西?你需要libmemcached的来源!

答案 3 :(得分:2)

试试这个:

sudo apt-get install libmemcached-dev