2011-12-22 10 views
7

Nokogiri ha un problema con la traduzione da e verso i caratteri UTF-8 che risulta provenire da libxml2, in particolare dalla versione 2.7.6, che è la versione supportata più alta su Ubuntu 10.04 LTS. Il bug è stato risolto nella versione 2.7.7 e successive, ma poiché la nostra app è ospitata su Heroku (stack bamboo-ree-1.8.7, basato su Ubuntu 10.04), dobbiamo usare la versione 2.7.6 e continuare a sperimentare bug, a meno che:Posso incorporare librerie di sistema (ad es. Libxml2) per compilare una gemma (ad esempio nokogiri) che posso distribuire su Heroku?

  1. qualcuno può/ha violato nokogiri per aggirare il problema
  2. Canonical urta la versione libxml2 supportato per Ubuntu 10.04 (e/o Heroku aggiornamenti libxml2 nel loro stack)
  3. posso venire con un modo per nokogiri di usare una versione di libxml2 che posso aggregare con l'app in modo tale che possa essere distribuita su Heroku.

Felice di ascoltare qualsiasi feedback su 1 o 2, naturalmente, ma curioso se 3 è fattibile. Ecco quello che so essere possibile:

la mia domanda è, posso includere il libxml2 più alto di versione con l'applicazione in modo tale che l'compilato, gemma vendor'ed lo usa quando ho commesso e lo spinse a Heroku?

+1

Finito di essere in grado di utilizzare la soluzione alternativa suggerita qui - https://github.com/tenderlove/nokogiri/issues/458#issuecomment-3136620. –

+0

Ben, qual è stata la soluzione. Quel collegamento ora è rotto. –

+1

@NateCook il link è ora https://github.com/sparklemotion/nokogiri/issues/458#issuecomment-3136620 – iain

risposta

1

non sono sicuro della risposta esatta, ma ho trovato un problema sollevato per Nokogiri che suona come il problema che ho appena descritto: https://github.com/tenderlove/nokogiri/issues/458

una delle risposte parla di come essi sono ospitati su Heroku e sono bloccati alla versione 2.7.6 di libxml2 e hanno pregato il loro caso di aggiornare a 2.7.8 per risolvere il loro problema: https://github.com/tenderlove/nokogiri/issues/458#issuecomment-2600583

Anche se improbabile, potrebbe essere utile contattare Heroku per vedere cosa possono fare (se possibile) , o se potrebbero avere qualche suggerimento? Potrei azzardare un'ipotesi che non cambieranno la versione di libxml2 perché è su uno stack bloccato (Bamboo) ma chi lo sa?

4

Non è la soluzione più facile da usare, ma ecco cosa ho fatto una volta per ottenere una versione personalizzata di libpq. L'ho fatto sul cedro, ma probabilmente lavoro per bambù se si va in tmp prima

  1. corsa Heroku bash
  2. ricciolo la fonte di ciò che si vuole costruire
  3. costruirlo
  4. send i binari fuori dal banco
  5. fornitore i binari compilati in vendor/qualunque cosa
  6. Heroku config: aggiungere LD_LIBRARY_PATH =/app/fornitore/qualunque cosa

Spiacente, non esiste ancora un modo migliore per ottenere i binaires personalizzati. In bocca al lupo.

+0

Grazie Will, ho provato questo e ho ottenuto tutti i passaggi per lavorare, ma non sembrava ancora utilizzare il mio libreria preferenziale a quella del sistema. Metti la mia libreria in/app/vendor/lib, imposta LD_LIBRARY_PATH a questo, prova anche a impostare LIBRARY_PATH, verifica tramite bash che sono stati impostati correttamente e che le librerie erano presenti. Ancora nessun dado. Finito con una soluzione alternativa, ma curioso se ci fosse qualcos'altro che puoi pensare che potrebbe aver fatto questo lavoro per te. –

0

Ho una soluzione leggermente migliore. Più gioco con la pergola più mi piace.Bower è semplicemente uno strumento costruito su git e struttura le cose in modo fantasioso (di solito mirato agli script JS frontend/non un requisito). Un'altra nota, inoltre, è ottima per installare dipendenze private oltre che github.

L'esempio è python, ma l'obiettivo generale è lo stesso e può essere regolato per ruby.

Quindi prendere questo progetto per un esempio 3scale_python.

Richiede l'installazione di libxml2 (tramite i suoi requisiti.txt). Il modo più semplice per me era includerlo in bower e quindi scrivere uno script per installarlo (script di shell e procfile).

bower.json

{ "name": "someapp", "version": "0.0.1", "homepage": "http://github.com/yourusername/yourrepo", "authors": [nem], "description": "something that uses 3scale at a specific commit", "main": "./lib/clock.py", "private": true, "dependencies": { "3scale_ws_api_for_python": "http://github.com/3scale/3scale_ws_api_for_python/archive/82328aa8e7d43f7ef89e420921a4d63e025b527f.zip" } }

script di installazione (manual_installs_python)

#!/bin/bash 
set -e 

oldPath=$(pwd) 

installing(){ 
    echo "-- installing $1 dependencies --" 
    echo '--------------------------------' 
    echo 
} 

#check for brew, if brew then use it to install something 
osx_brew() { 
    #if brew is installed (no error) 
    if hash brew 2 > /dev/null; then 
     installing 'brew' 
     brew "[email protected]" 
    fi 
} 

installing 'python easy_install' 
easy_install figleaf 

cd ./bower_components/some_other_python_app 
python setup.py install 

if [[ $IS_HEROKU = 1 ]]; then 
    #installing on ubuntu/heroku only as, so far I have not gotten libxml2-python to install successfully on OSX 
    cd ../3scale_ws_api_for_python 
    #requirements.txt here actually installs and compiles libxml2 
    pip install -r requirements.txt 
    python setup.py install 
fi 

cd "$oldPath" 

echo "-- done with dependencies -- " 
exit 0 

Procfile

web: pip install -r requirements.txt && ./scripts/manual_python_installs

Fatto

012.351.641.061.

Installa libxml2 che potrebbe essere utile per consultare gli script 3scale si attiva tramite its requirements.txt.

+0

btw probabilmente lo puoi fare anche via npm – Nick

Problemi correlati