2012-07-16 29 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