2012-07-16 30 views
15

我在这上面花了很多时间,这显然超出了我的新手理解/技能。我试图安装django-heroku-memcacheify pip安装,它会引发错误。我将问题追踪至pylibmc,这是造成所有问题的原因。下面是错误日志的有趣的部分之一:Heroku上的Memcached w/Django:无法安装pylibmc/memcacheify

_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-haysta[email protected]#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/[email protected]#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/[email protected]9cbe05e#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 [email protected]:crowdcademy.git 
! [remote rejected] master -> master (pre-receive hook declined) 
error: failed to push some refs to '[email protected]:crowdcademy.git' 

所以这里的交易

我不能TES在我的本地环境中,我正在运行一个窗口的废话。但从我读的libmemcachedalready installed在heroku上。而且没有其他人似乎对pylibmc有任何问题,因为我在谷歌上找不到任何东西。 In this post他们谈论:

that if they detect that you are loading pylibmc, they will bootstrap libmemcached for you

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

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

编辑2

既然有数百人捉迷藏Memcached和在Heroku Django的没有任何问题,我不认为Heroku的用户都应该安装libmemcached带有某种黑客。当heroku在您的需求文件中检测到pylibmc时,文档会对它进行讨论,好像它是为您启动的。这导致我得出结论:A)无论是在我的设置或我使用的应用程序中的一个错误或B) heroku最近改变了一些东西,并打破了django libmemcached的自动引导。我试着用heroku config进行全新安装:添加CLEAN_VIRTUALENV = true,但是that's not working either right now。我希望这是A和有人有同样的问题。如果它是B我不知道如何解决它。

+0

这个问题刚刚开始发生在我身上了今天的蓝...和memcached的已经工作了几个月对我来说。我很高兴你问这个,因为tiwei的答案是现货。我已将我的需求重新组织为多个需求文件,并根据需求导入它们;这似乎是致命的。我想我只是把pylibmc放在根文件中,并且应该清除它。 – 2013-01-03 23:27:12

回答

31

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

+2

非常感谢!我不敢相信这很简单。这确实需要记录。 – 2012-08-13 18:24:22

+1

感谢您花时间回答您自己的问题! – 2013-01-03 23:40:11

+3

您不必为Heroku平整您的需求文件。在'requirements.txt'中添加'#pylibmc'对我有用。 – 2013-02-13 05:39:54

4

你试过类似libmemcached-dev,memcached-dev的东西吗?你需要libmemcached的源代码!

+0

我不确定如果我可以在heroku上安装libmemcached,我可能没有root权限来执行此操作。另外,如果它不在我的requirements.txt中,它不会在我推入更新时自动安装。但我愿意尝试任何事情,我的假设可能是错的! – tiwei 2012-07-16 21:07:09

+0

libmemcached-dev为我修复了这个问题(Ubuntu) – Mark 2014-04-11 15:39:16

10

您需要安装libmemcached

你不需要开发头或任何东西,普通的绰绰有余!

如果您无法安装libmemcached,则无法安装pylibmc。对不起,但没有太多要做。

有一种方法来解决这个问题,但这是一个垃圾的想法,所以如果你想要的细节给我留言。

+0

感谢lericson,我尝试了一些黑客来安装它,但是当你尝试去pip之外时,heroku并不喜欢它。我相信heroku会为你安装libmemcached,至少这是应该发生的事情。这一切都有点模糊,文件几乎没有谈及它。 – tiwei 2012-07-17 12:02:34

+1

sudo apt-get install -y libmemcached-dev zlib1g-dev libssl-dev python-dev build-essential pip install pylibmc – 2013-09-08 23:31:15

2

试试这个:

sudo apt-get install libmemcached-dev 
+0

感谢它的工作 – soField 2014-05-07 14:50:54