2011-05-21 38 views
3

使用Ubuntu 10.04 Lucid Web服務器(linode)。使用PDFKit和Rails應用程序的幫助

按照以上說明安裝wkhtmltopdf link(唯一一個爲我工作。)

我可以運行wkhtmltopdf http://www.google.com google.pdf和它的作品。

任何來自我的導軌應用程序生成500錯誤。 Apache的error.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) 
+0

Linode實例上的整個修改的Qt庫和'wkhtmltopdf'?編譯後你移動它們了嗎? (因爲'前綴../ wkqt',我期待位於構建'wkhtmltopdf'二進制文件中的庫路徑也是相對的。)運行'ldd/path/to/wkhtmltopdf'並查看它缺少的庫。 .. – sarnold 2011-05-21 22:52:38

+0

用ldd的響應更新。對不起,但這不知道如何閱讀。 – pcasa 2011-05-21 23:08:53

+0

優秀;您的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 *') – sarnold 2011-05-22 00:09:40

回答

2

通常情況下,你的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)需要能夠讀取磁帶庫和所有目錄得到到庫鏈接器鏈接。