2011-12-22 5 views
7

Nokogiri ma problem z tłumaczeniem na i ze znaków UTF-8, który okazuje się pochodzić z biblioteki libxml2, w szczególności wersji 2.7.6, która jest najlepiej obsługiwaną wersją systemu Ubuntu 10.04 LTS. Błąd jest naprawiony w wersji 2.7.7 i wyższej, ale ponieważ nasza aplikacja jest hostowana na Heroku (stos bambusa-ree-1.8.7, w oparciu o Ubuntu 10.04), musimy użyć wersji 2.7.6 i nadal doświadczać bug, chyba że:Czy mogę włączyć biblioteki systemowe (np. Libxml2), które kompiluję przeciwko sobie w klejnot (np. Nokogiri), który mogę wdrożyć w Heroku?

  1. Ktoś może/włamał nokogiri aby obejść problem
  2. Canonical stłuczki obsługiwaną wersję libxml2 dla Ubuntu 10.04 (i/lub Heroku aktualizacje libxml2 w ich stosie)
  3. mogę przyjść sposób, aby nokogiri używał wersji libxml2, którą mogę połączyć z aplikacją w taki sposób, aby mogła zostać wdrożona w Heroku.

Z przyjemnością wysłuchamy opinii na temat 1 lub 2, ale ciekawy, czy 3 jest wykonalne. Oto, co wiem, będzie to możliwe:

  • Nokogiri można powiązać przeciwko biblioteki znajduje się w niestandardowym miejscu - http://nokogiri.org/tutorials/installing_nokogiri.html
  • Klejnot stworzony w ten sposób można zainstalować do dostawcy/klejnoty, a tym samym wziąć pierwszeństwo w stosunku do klejnotów systemowych

Moje pytanie brzmi, czy mogę dołączyć wyższą wersjonowaną bibliotekę libxml2 do aplikacji w taki sposób, że skompilowany klej sprzedawany przez sprzedawcę używa go, gdy go zatwierdzę i przekazałem do Heroku?

+1

Skończyło się na możliwości zastosowania sugerowanego tutaj obejścia - https://github.com/tenderlove/nokogiri/issues/458#issuecomment-3136620. –

+0

Ben, jakie było obejście tego problemu. Ten link jest teraz zepsuty. –

+1

@NateCook link jest teraz https://github.com/sparklemotion/nokogiri/issues/458#issuecomment-3136620 – iain

Odpowiedz

1

nie jestem pewien dokładnej odpowiedzi, ale znalazłem problem podniesiony Nokogiri który brzmi jak problemu opisanego właśnie: https://github.com/tenderlove/nokogiri/issues/458

jedną z odpowiedzi rozmowy o tym, jak są one przechowywane na Heroku i są zablokowane do wersji 2.7.6 libxml2 i poprosili ich o uaktualnienie do wersji 2.7.8, aby naprawić ich problem: https://github.com/tenderlove/nokogiri/issues/458#issuecomment-2600583

Chociaż jest to mało prawdopodobne, warto skontaktować się z Heroku, aby zobaczyć, co mogą zrobić (jeśli w ogóle) lub czy mogą mieć jakieś sugestie? Zaryzykowałbym przypuszczenie, że nie zmienią wersji libxml2, ponieważ jest na zablokowanym stosie (Bamboo), ale kto wie?

4

To nie jest najbardziej przyjazne dla użytkownika rozwiązanie, ale oto, co zrobiłem raz, aby uzyskać niestandardową wersję libpq. Zrobiłem to na cedru, ale będzie to prawdopodobnie pracować dla bambusa jeśli pójdziesz do tmp pierwszej

  1. run Heroku bash
  2. curl źródła co chcesz zbudować
  3. zbudować
  4. send binaria spośród hamowni
  5. dostawcy wbudowane pliki binarne w vendor/cokolwiek
  6. Heroku config: dodać LD_LIBRARY_PATH =/app/vendor/cokolwiek

Niestety, nie ma jeszcze lepszego sposobu na uzyskanie niestandardowych binaires. Powodzenia.

+0

Dzięki Will, wypróbowałem to i dostałem wszystkie kroki do działania, ale nadal nie korzystałem z mojego biblioteka zamiast systemu. Umieść moją bibliotekę w/app/vendor/lib, ustaw dla niej LD_LIBRARY_PATH, wypróbowałem także ustawienie LIBRARY_PATH, sprawdziłem przez bash, czy zostały poprawnie ustawione i że biblioteki były obecne. Wciąż nie ma kości. Skończyło się na obejściu, ale ciekawy, czy było coś jeszcze, co mogłoby ci się przydać w tej pracy. –

0

Mam nieco lepsze rozwiązanie. Im więcej bawię się altanką, tym bardziej ją uwielbiam.Bower to po prostu narzędzie zbudowane na bazie gita i konstruuje rzeczy w fantazyjny sposób (zwykle ukierunkowane na skrypty JS frontendu/nie jest to wymagane). I jeszcze jedna uwaga, altanka jest świetna do instalowania prywatnych zależności, jak również poza githubem.

Przykładem jest python, ale ogólny cel jest taki sam i można go dostosować do ruby.

Weź więc ten projekt na przykład 3scale_python.

Wymaga zainstalowania biblioteki libxml2 (za pośrednictwem pliku requirements.txt). Najprostszym sposobem było dla mnie umieszczenie go w altance, a następnie napisanie skryptu do zainstalowania (skrypt powłoki i 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" } }

zainstalować skrypt (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

Sporządzono

Aby zainstalować libxml2, może zajść potrzeba sprawdzenia skryptów 3skalowych za pomocą pliku requirements.txt.

+0

btw prawdopodobnie można to zrobić również poprzez npm – Nick

Powiązane problemy