Problèmes avec memcache.so

8

On m'a demandé de lancer un site créé par quelqu'un d'autre. C'est un site de boutique Wordpress qui a besoin de Memcached pour fonctionner, et j'ai eu des problèmes pour que Memcached et le plugin php memcache fonctionnent sur mon serveur local. Avant d'installer memcached et le plugin PHP memcache, j'obtiendrais cette erreur:

Fatal error: Class 'Memcache' not found in [Path]wp-content/object-cache.php on line 350

Maintenant que j'ai memcached et que le plugin PHP memcache est installé (via Homebrew), j'obtiens une page "Aucune donnée reçue" et j'obtiens cette erreur dans mon journal d'erreurs Apache:

dyld: lazy symbol binding failed: Symbol not found: _mmc_queue_pop
  Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
  Expected in: flat namespace

dyld: Symbol not found: _mmc_queue_pop
  Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
  Expected in: flat namespace

[Sat May 05 16:38:27 2012] [notice] child pid 26491 exit signal Trace/BPT trap (5)

J'ai essayé de chercher ce pid dans Activity Monitor en vain, et il change chaque fois que j'essaie de charger la page. De plus, je ne trouve rien sur _mmc_queue_pop nulle part.

J'utilise Mac OSX Lion, PHP ver 5.3.8, Memcached ver 1.4.13 et le plugin PHP Memcache ver 3.0.6.

Est-ce que quelqu'un sait comment je peux résoudre ce problème?

Merci!

CourtDemone
la source
1
Reconstruisez memcached avec -fgnu89-inlinedans CFLAGS/ CXXFLAGS. Ce qui se passe, c'est que le inlinemot - clé sous de nouvelles règles entraîne l' _mmc_queue_popinline dans tous les cas, ne laissant rien pour memcache.soun lien dynamique vers.
David Schwartz
Comment puis-je modifier les CFLAGS / CXXFLAGS pour Homebrew? Aurais-je besoin de modifier quelque chose dans le fichier Ruby Forumla?
CourtDemone

Réponses:

8

Comme David l'a mentionné dans les commentaires, lors de la construction du plugin memcache, PAS de memcached lui-même, vous devez ajouter run configurecomme ceci:

MACOSX_DEPLOYMENT_TARGET=10.7 CFLAGS='-fgnu89-inline' LDFLAGS='-fgnu89-inline' CXXFLAGS='-fgnu89-inline' ./configure

Cela a parfaitement fonctionné pour moi.

CourtDemone
la source
2

Je suggérerais dans un premier temps de m'assurer que memcache.so est vraiment lié. Sur Linux, vous utiliseriez ldd, sur OSX, il devrait être otool -LIIRC. Il semble que le plugin s'empare soit de la mauvaise de plusieurs bibliothèques memcache sur le système, soit d'une version incompatible.

rackandboneman
la source
Je ne suis pas le plus fort dans ce genre de choses. Que dois-je faire exactement dans le terminal pour ce faire?
CourtDemone
1
Je vois juste que pour qu'otool soit disponible, vous pourriez avoir besoin des outils Xcode installés. Dans ce cas, une page de manuel doit être disponible. De toute façon, David a probablement déjà résolu le problème.
rackandboneman
J'ai installé la dernière version de Xcode, ainsi que des outils de ligne de commande. Comme je l'ai dit en commentaire du billet de David, je ne sais pas comment je suis censé mettre cela en œuvre. Quelqu'un peut-il m'aider avec ça?
CourtDemone
1
Vérifiez avec la documentation de Homebrew (si c'est de là que vient votre memcache) sur la façon de définir les "options de configuration" et les CFLAGS. Je vous suggère de ne jouer avec CFLAGS que si aucune "option de configuration" n'est réellement disponible. Je ne suis pas trop familier avec l'homebrew pour donner des conseils sur les livres de cuisine, et des conseils génériques en supposant qu'un cycle d'installation "./configure --options && make && make install" peut être trompeur. Pourtant, la familiarité avec le même cycle est extrêmement utile pour jouer avec n'importe quel système de génération de source.
rackandboneman
J'ai besoin de quelqu'un qui est plus familier avec Homebrew. J'ai essayé d'ajouter des lignes CFLAGS à la formule d'installation de memcached et elle ne s'est pas installée correctement.
CourtDemone
2

Addendum - El Capitan, php56, php56-memcache 3.0.8

Après avoir lu les réponses de David Schwartz et CourtDemone, je n'ai toujours pas compris, jusqu'à ce que je lise cette réponse sur SO sur la façon de modifier une formule homebrew.

J'ai ajouté ce qui suit à la formule en exécutant brew edit php56-memcacheet en collant dans les lignes suivantes:

   .  20     safe_phpize
   .  21 
   +  22     ENV['MACOSX_DEPLOYMENT_TARGET'] = '10.11'
   +  23     ENV['CFLAGS'] = '-fgnu89-inline'
   +  24     ENV['LDFLAGS'] = '-fgnu89-inline'
   +  25     ENV['CXXFLAGS'] = '-fgnu89-inline'
   +  26 
   .  27     system "./configure", "--prefix=#{prefix}",
   .  28                           phpconfig
   .  29     system "make"
wbit
la source
Merci! Aussi une autre référence: github.com/Homebrew/homebrew-php/issues/2529
Pedro Casado