2011-12-22 9 views
7

Nokogiri tiene un problema con la traducción hacia y desde caracteres UTF-8 que resulta venir de libxml2, específicamente la versión 2.7.6, que es la versión más soportada en Ubuntu 10.04 LTS. El error se corrigió en la versión 2.7.7 y posteriores, pero como nuestra aplicación está alojada en Heroku (bamboo-ree-1.8.7 stack, basado en Ubuntu 10.04), tenemos que usar la versión 2.7.6, y continuar experimentando el error, a menos que:¿Puedo incorporar bibliotecas del sistema (por ejemplo, libxml2) compilar en contra de una gema (por ejemplo, nokogiri) que puedo implementar en Heroku?

  1. Alguien puede/ha cortado nokogiri a evitar el problema
  2. Canonical topa la versión de libxml2 apoyado para Ubuntu 10.04 (y/heroku actualizaciones libxml2 o en su pila)
  3. que puede venir con una forma de que nokogiri use una versión de libxml2 que puedo agrupar con la aplicación de tal forma que se pueda implementar en Heroku.

Feliz de escuchar cualquier comentario sobre 1 o 2 por supuesto, pero curioso si 3 es factible. Esto es lo que sé que es posible:

Mi pregunta es, ¿puedo incluir la mayor libxml2 versionado con la aplicación de tal manera que el compilado, joya vendor'ed usa cuando he cometido él y lo empujó a Heroku?

+1

Terminó la posibilidad de utilizar la solución sugerida aquí - https://github.com/tenderlove/nokogiri/issues/458#issuecomment-3136620. –

+0

Ben, ¿cuál fue la solución? Ese enlace está roto ahora. –

+1

@NateCook el enlace ahora es https://github.com/sparklemotion/nokogiri/issues/458#issuecomment-3136620 – iain

Respuesta

1

No estoy seguro de la respuesta exacta, pero he encontrado una cuestión planteada por Nokogiri que suena como el problema que acabas de describir: https://github.com/tenderlove/nokogiri/issues/458

una de las respuestas habla de la forma en que están alojados en Heroku y están bloqueados a la versión 2.7.6 de libxml2 y han alegado su caso para actualizar a 2.7.8 para arreglar su problema: https://github.com/tenderlove/nokogiri/issues/458#issuecomment-2600583

Aunque es poco probable, podría ser útil contactar a Heroku para ver qué pueden hacer (si acaso) , o si es posible que tengan alguna sugerencia? Me atrevería a suponer que no cambiarán la versión de libxml2 ya que está en una pila bloqueada (Bamboo) pero ¿quién sabe?

4

No es la solución más fácil de usar, pero esto es lo que hice una vez para obtener una versión personalizada de libpq. Lo hice en cedro, pero probablemente a trabajar para el bambú si usted entra en tmp primera

  1. heroku plazo fiesta
  2. rizo la fuente de lo que se quiere construir
  3. acumulación que
  4. envío los binarios fuera del banco de pruebas
  5. proveedor de los binarios construidos en proveedor/lo que sea
  6. heroku config: añadir LD_LIBRARY_PATH =/app/proveedor/lo que sea

Lo sentimos, no existe una mejor manera de obtener binarios personalizados. Buena suerte.

+0

Gracias Will, lo intenté y obtuve todos los pasos para trabajar, pero todavía no parecía utilizar mi biblioteca en preferencia al sistema uno. Coloca mi biblioteca en/app/vendor/lib, establece LD_LIBRARY_PATH para eso, también intentaste establecer LIBRARY_PATH, comprobado a través de bash que estaban correctamente configurados y que las bibliotecas estaban presentes. Todavía no hay dados. Terminó usando una solución alternativa, pero curioso de si había algo más que pueda pensar que podría haber hecho que esto funcione para usted. –

0

Tengo una solución un poco mejor. Cuanto más juego con Bower, más me encanta.Bower es simplemente una herramienta construida sobre git y estructura las cosas de una manera elegante (normalmente dirigida a guiones frontend JS/no es un requisito). Otra nota, además, bower es ideal para instalar dependencias privadas y github.

El ejemplo es python, pero el objetivo general es el mismo y se puede ajustar para ruby.

Así que tome este proyecto como ejemplo 3scale_python.

Requiere que se instale libxml2 (a través de su requirements.txt). La forma más fácil para mí fue incluirlo en bower y luego escribir un script para instalarlo (shell script y 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 de instalación (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

Hecho

Instalar demasiado libxml2 puede que desee consultar las secuencias de comandos 3scale dispara a través de su requirements.txt.

+0

por cierto, probablemente también puedas hacerlo a través de npm – Nick

Cuestiones relacionadas