2015-12-11 20 views
18

Tôi đang cố gắng cài đặt bản dựng tùy chỉnh trên heroku, vì vậy tôi đang sử dụng nhiều cách khác nhau để cài đặt phần ba bằng cách sử dụng bộ ba lô. Trong tập tin .buildpacks của tôi, tôi có:Cài đặt tùy chỉnh xây dựng heroku và vấn đề với đường dẫn Thư viện

https://github.com/ddollar/heroku-buildpack-apt 
https://github.com/heroku/heroku-buildpack-python.git 

và trong Aptfile của tôi, tôi có như sau: libgeoip-dev mà là một điều kiện tiên quyết cho geoip được cài đặt với các requirements.txt (GeoIP==1.3.2)

Dưới đây là môi trường của tôi biến:

remote: C_INCLUDE_PATH is /app/.heroku/vendor/include:/app/.heroku/vendor/include:/app/.heroku/python/include 
remote: CPATH is /tmp/build_xxxxx/.apt/usr/include: 
remote: LD_LIBRARY_PATH is /app/.heroku/vendor/lib:/app/.heroku/vendor/lib:/app/.heroku/python/lib 

thông báo lỗi tôi nhận được là:

remote:  building 'GeoIP' extension 
remote:  creating build 
remote:  creating build/temp.linux-x86_64-2.7 
remote:  gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/app/.heroku/python/include/python2.7 -c py_GeoIP.c -o build/temp.linux-x86_64-2.7/py_GeoIP.o -fno-strict-aliasing 
remote:  creating build/lib.linux-x86_64-2.7 
remote:  gcc -pthread -shared build/temp.linux-x86_64-2.7/py_GeoIP.o -lGeoIP -o build/lib.linux-x86_64-2.7/GeoIP.so 
remote:  /usr/bin/ld: cannot find -lGeoIP 
remote:  collect2: error: ld returned 1 exit status 
remote:  error: command 'gcc' failed with exit status 1 

Cách thông minh nhất để sửa lỗi này là gì? I E. Tôi đoán tôi không thể thay đổi nơi trình quản lý gói cài đặt. Có cách nào để giái quyết vấn đề này không?

Trả lời

5

https://github.com/heroku/heroku-buildpack-python/blob/master/bin/compile#L99-L107

# Prepend proper path buildpack use. 
export PATH=$BUILD_DIR/.heroku/python/bin:$BUILD_DIR/.heroku/vendor/bin:$PATH 
export PYTHONUNBUFFERED=1 
export LANG=en_US.UTF-8 
export C_INCLUDE_PATH=/app/.heroku/vendor/include:$BUILD_DIR/.heroku/vendor/include:/app/.heroku/python/include 
export CPLUS_INCLUDE_PATH=/app/.heroku/vendor/include:$BUILD_DIR/.heroku/vendor/include:/app/.heroku/python/include 
export LIBRARY_PATH=/app/.heroku/vendor/lib:$BUILD_DIR/.heroku/vendor/lib:/app/.heroku/python/lib 
export LD_LIBRARY_PATH=/app/.heroku/vendor/lib:$BUILD_DIR/.hero ku/vendor/lib:/app/.heroku/python/lib 
export PKG_CONFIG_PATH=/app/.heroku/vendor/lib/pkg-config:$BUILD_DIR/.heroku/vendor/lib/pkg-config:/app/.heroku/python/lib/pkg-config 

vs

https://github.com/ddollar/heroku-buildpack-apt/blob/master/bin/compile#L75-L81

export PATH="$BUILD_DIR/.apt/usr/bin:$PATH" 
export LD_LIBRARY_PATH="$BUILD_DIR/.apt/usr/lib/x86_64-linux-gnu:$BUILD_DIR/.apt/usr/lib/i386-linux-gnu:$BUILD_DIR/.apt/usr/lib:$LD_LIBRARY_PATH" 
export LIBRARY_PATH="$BUILD_DIR/.apt/usr/lib/x86_64-linux-gnu:$BUILD_DIR/.apt/usr/lib/i386-linux-gnu:$BUILD_DIR/.apt/usr/lib:$LIBRARY_PATH" 
export INCLUDE_PATH="$BUILD_DIR/.apt/usr/include:$INCLUDE_PATH" 
export CPATH="$INCLUDE_PATH" 
export CPPPATH="$INCLUDE_PATH" 
export PKG_CONFIG_PATH="$BUILD_DIR/.apt/usr/lib/x86_64-linux-gnu/pkgconfig:$BUILD_DIR/.apt/usr/lib/i386-linux-gnu/pkgconfig:$BUILD_DIR/.apt/usr/lib/pkgconfig:$PKG_CONFIG_PATH" 

Các heroku-buildpack-python buildpack không chơi đẹp với heroku-buildpack-apt buildpack vì nó được clobbering biến quan trọng đối với gcc để liên kết mở rộng python của bạn với số geoip lib. Gửi lỗi trên trình theo dõi vấn đề.

Issue tracker: https://github.com/heroku/heroku-buildpack-python/issues

1

Tôi ngây thơ giải quyết một vấn đề tương tự bằng cách sửa đổi kịch bản biên dịch Heroku-buildpack-python để không unset LD_LIBRARY_PATH và include_path, cũng như để phụ thêm LD_LIBRARY_PATH và include_path biến hiện nay trong xuất khẩu của họ như vậy là để không ghi đè lên chúng.

Đây là ngã ba của tôi: https://github.com/jasrusable/heroku-buildpack-python

Các vấn đề liên quan