Nokogiri在转换为UTF-8字符时出现问题,后者最终来自libxml2,特别是版本2.7.6,这是Ubuntu 10.04 LTS上支持的最高版本。该错误已在2.7.7及更高版本中修复,但由于我们的应用程序托管在Heroku(bamboo-ree-1.8.7堆栈,基于Ubuntu 10.04)上,我们必须使用2.7.6版本,并继续体验错误,除非:
很高兴听到有关1或2的任何反馈,但很好奇3是否可行。以下是我所知道的可能:
我的问题是,我是否可以将更高版本的libxml2包含在应用程序中,以便在我提交并将其推送到Heroku时,已编译的供应商宝石使用它?
答案 0 :(得分:4)
这不是最用户友好的解决方案,但这是我曾经做过的一次获得自定义版本的libpq。我是在雪松上做过的,但是如果你先进入tmp,它可能适用于竹子。
抱歉没有更好的方法来获得定制binaires。祝你好运。
答案 1 :(得分:1)
我不确定确切的答案,但我发现Nokogiri的问题听起来像你刚刚描述的问题:https://github.com/tenderlove/nokogiri/issues/458
其中一个回复讨论了它们如何在Heroku上托管并被锁定到libxml2的2.7.6版本并且已经请求将其升级到2.7.8来解决它们的问题:https://github.com/tenderlove/nokogiri/issues/458#issuecomment-2600583
虽然不太可能,但是可能值得联系Heroku看看他们可以做什么(如果有的话),或者他们是否可能有任何建议?我会冒险猜测他们不会改变libxml2版本,因为它在一个锁定的堆栈(Bamboo)上但谁知道?
答案 2 :(得分:0)
我有一个更好的解决方案。我越喜欢凉亭,我就越喜欢它。 Bower只是一个构建在git之上的工具,以一种奇特的方式构建东西(通常针对前端JS脚本/不是必需的)。另外还有一个注意事项,bower非常适合安装私有依赖项以及github。
示例是python,但总体目标是相同的,可以针对ruby进行调整。
所以请以此项目为例3scale_python。
它需要安装libxml2(通过其requirements.txt)。对我来说最简单的方法是将它包含在bower中,然后编写一个脚本来安装它(shell脚本和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"
}
}
安装脚本(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 "$@"
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
完成
安装libxml2你可能想查阅脚本3scale通过它的requirements.txt触发。