Помощь с приложением PDFKit и Rails

Работа на веб-сервере Ubuntu 10.04 Lucid (linode).

Следуйте этим инструкциям, чтобы установить wkhtmltopdf ссылка (единственная, которая сработала для меня.)

Я могу запустить wkhtmltopdf http://www.google.com google.pdf, и это работает.

Что-нибудь из моего приложения rails генерирует ошибку 500. ошибка apache.log

/bin/wkhtmltopdf: symbol lookup error: /bin/wkhtmltopdf: undefined symbol: _ZN9QListData11detach_growEPii

бревно рельсов

Rendered customers/agreement_form.html.erb (15.0ms)
Completed 200 OK in 19ms (Views: 16.6ms | ActiveRecord: 0.6ms)

RuntimeError (command failed: /bin/wkhtmltopdf --encoding UTF-8 --page-size A4 --margin-top 0.5in --margin-right 0.75in --margin-bottom 0.5in --margin-left 0.75in --print-media-type --quiet - -):
  app/middleware/flash_session_cookie_middleware.rb:19:in `call'

ИЗМЕНИТЬ

ldd /bin/wkhtmltopdf 
    linux-gate.so.1 =>  (0xf57fe000)
    libwkhtmltox.so.0 => /lib/libwkhtmltox.so.0 (0xb7718000)
    libQtWebKit.so.4 => /root/sources/wkqt/lib/libQtWebKit.so.4 (0xb64cd000)
    libQtSvg.so.4 => /root/sources/wkqt/lib/libQtSvg.so.4 (0xb6473000)
    libQtXmlPatterns.so.4 => /root/sources/wkqt/lib/libQtXmlPatterns.so.4 (0xb6047000)
    libQtGui.so.4 => /root/sources/wkqt/lib/libQtGui.so.4 (0xb5551000)
    libQtNetwork.so.4 => /root/sources/wkqt/lib/libQtNetwork.so.4 (0xb5423000)
    libQtCore.so.4 => /root/sources/wkqt/lib/libQtCore.so.4 (0xb517c000)
    libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb5163000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb506c000)
    libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb5046000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb5027000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb4ecd000)
    libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb4ec3000)
    libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb4e92000)
    libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb4e1c000)
    libXext.so.6 => /usr/lib/libXext.so.6 (0xb4e0c000)
    libX11.so.6 => /usr/lib/libX11.so.6 (0xb4cef000)
    libz.so.1 => /lib/libz.so.1 (0xb4cda000)
    libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0xb4cd3000)
    librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb4cca000)
    libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0xb4c00000)
    libpng12.so.0 => /lib/libpng12.so.0 (0xb4bdb000)
    libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0xb4b9c000)
    libSM.so.6 => /usr/lib/libSM.so.6 (0xb4b92000)
    libICE.so.6 => /usr/lib/libICE.so.6 (0xb4b79000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb4b75000)
    /lib/ld-linux.so.2 (0xb7781000)
    libexpat.so.1 => /lib/libexpat.so.1 (0xb4b4e000)
    libxcb.so.1 => /usr/lib/libxcb.so.1 (0xb4b34000)
    libpcre.so.3 => /lib/libpcre.so.3 (0xb4b02000)
    libuuid.so.1 => /lib/libuuid.so.1 (0xb4afd000)
    libXau.so.6 => /usr/lib/libXau.so.6 (0xb4af9000)
    libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb4af3000)

person pcasa    schedule 21.05.2011    source источник
comment
Находится ли вся модифицированная библиотека Qt и wkhtmltopdf в экземпляре Linode? Вы перемещали их после компиляции? (Из-за prefix ../wkqt я ожидаю, что пути к библиотекам, расположенным в двоичном файле сборки wkhtmltopdf, также будут относительными.) Запустите ldd /path/to/wkhtmltopdf и посмотрите, какие библиотеки отсутствуют...   -  person sarnold    schedule 22.05.2011
comment
Обновлено с ответом от ldd. Извините, но это не умеет читать это.   -  person pcasa    schedule 22.05.2011
comment
отлично; ваше приложение RoR будет работать под другим пользователем, возможно, www-data, возможно, под другой системной учетной записью. Может ли этот пользователь читать /root/sources/wkqt/lib/libQtSvg.so.4 и все другие библиотеки в этом каталоге? Возможно, вам потребуется изменить разрешения для /root, /root/sources, /root/sources/wkqt, /root/sources/wkqt/lib, чтобы разрешить всем читать и выполнять привилегии. (Проверьте разрешения с помощью ls -l; установите разрешения с помощью chmod(1), например, chmod 755 /root /root/sources /root/sources/wkqt /root/sources/wkqt/lib ; chmod 644 /root/sources/wkqt/lib/*so*)   -  person sarnold    schedule 22.05.2011
comment
ЭТО БЫЛО! Спасибо!!! Опубликовать как ответ, чтобы получить кредит. Если есть шанс, вы можете помочь мне с этим вопросом stackoverflow.com/questions/6037286/   -  person pcasa    schedule 22.05.2011
comment
отлично. :) Рад помочь, посмотрю другой вопрос...   -  person sarnold    schedule 23.05.2011


Ответы (1)


Как правило, ваше приложение RoR будет работать под другим пользователем, чем root: возможно, www-data, возможно, под другой системной учетной записью.

Может ли этот пользователь читать /root/sources/wkqt/lib/libQtSvg.so.4 и все другие библиотеки в этом каталоге?

Возможно, вам потребуется изменить разрешения на:

/root
/root/sources
/root/sources/wkqt
/root/sources/wkqt/lib

чтобы разрешить всем читать и выполнять привилегии. Вы можете проверить разрешения с помощью ls -l; установить разрешения с помощью chmod(1):

chmod 755 /root /root/sources /root/sources/wkqt /root/sources/wkqt/lib
chmod 644 /root/sources/wkqt/lib/*so*

Чтобы выполнить компоновку во время выполнения, компоновщик ld.so(8) должен иметь возможность читать библиотеки и все каталоги, чтобы получить библиотеки.

person sarnold    schedule 22.05.2011