8

したがって、heroku を使用して Rails アプリケーションをホストしています。杉のスタックに移動しました。このスタックには pdftk ライブラリがインストールされていません。サポートに連絡したところ、amd64 ubuntu 用に静的にコンパイルしてアプリケーションに含めるように言われました。

これは私が思っていたよりも難しいことがわかりました。最初に、ubuntu のパッケージ ( http://packages.ubuntu.com/natty/pdftk )をダウンロードして展開し、バイナリ ファイルと共有ライブラリを含めました。次のような奇妙なエラーが発生します。

Unhandled Java Exception:
java.lang.NullPointerException
   at com.lowagie.text.pdf.PdfCopy.copyIndirect(pdftk)
   at com.lowagie.text.pdf.PdfCopy.copyObject(pdftk)
   at com.lowagie.text.pdf.PdfCopy.copyDictionary(pdftk)

これは、依存関係の一部がインストールされていないためだと思いますか?

だからここに私の質問があります:

  1. ライブラリを静的にコンパイルする簡単な方法はありますか? それとも、そのバイナリ ファイルだけでなく、すべてのライブラリと依存関係を移動する必要がありますか?
  2. ルビーで複数ページのPDFを単一ページのファイルに分割しようとしています。PDFTKなしでこれを行う方法はありますか? それとも、PDFTK を静的にコンパイルしようとしているのですか?

助けてくれてありがとう、これは簡単な問題ではないことはわかっていますが、これについて助けていただければ幸いです。このいまいましいことを機能させるために、6時間近く無駄にしました。

4

5 に答える 5

4

残念ながら、Heroku は柔軟性を追加するためにマジックを取り除き続けています。その結果、以前は自分でサーバーを管理および保守していた時代のように感じることがますます増えています。簡単な解決策はありません。私の「モンキーパッチ」は、PDFTKをインストールし、ファイルを処理して送り返すことができるサーバーにファイルを送信することです。素晴らしいことではありませんが、うまくいきます。これに対処しなければならないことは、heroku を使用する目的に反します。

于 2011-08-21T19:39:07.903 に答える
3

簡単な解決策は、heroku にはない pdftk の依存関係を 1 つ追加することです。

$ldd pdftk
    linux-vdso.so.1 =>  (0x00007ffff43ca000)
    libgcj.so.10 => not found
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f1d26d48000)
    libm.so.6 => /lib/libm.so.6 (0x00007f1d26ac4000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f1d268ad000)
    libc.so.6 => /lib/libc.so.6 (0x00007f1d2652a000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x00007f1d2630c000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f1d27064000)

pdftk と libgcj.so.10 をアプリの /bin ディレクトリに配置しました。次に、ライブラリをロードするときに /bin ディレクトリを調べるように heroku に指示するだけです。

入力できます

$heroku config
LD_LIBRARY_PATH:             /app/.heroku/vendor/lib
LIBRARY_PATH:                /app/.heroku/vendor/lib

現在の LD_LIBRARY_PATH が何に設定されているかを確認し、/app/bin (または libgcj.so.10 を保存するために選択したディレクトリ) を追加します。

$heroku config:set LD_LIBRARY_PATH=/app/.heroku/vendor/lib:/app/bin

欠点は、スラッグのサイズが 15.9MB から 27.5MB になったことです。

于 2012-09-14T23:59:36.817 に答える
2

同じ問題に遭遇しました。私たちが思いついた解決策は、https://github.com/hellerbarde/staplerの代わりに Stapler を使用することでした。これは Python ユーティリティであり、Heroku に追加のモジュール (pyPdf) をインストールするだけで済みます。

私はこのブログエントリに慣れてきました: http://theprogrammingbutler.com/blog/archives/2011/07/28/running-pdftotext-on-heroku/

pyPdf をインストールするために私が従った手順は次のとおりです。

heroku bash コンソールへのアクセス

heroku run bash

pyPdf の最新バージョンのインストール

cd tmp
curl http://pybrary.net/pyPdf/pyPdf-1.13.tar.gz -o pyPdf-1.13.tar.gz
tar zxvf pyPdf-1.13.tar.gz
python setup.py install --user

これにより、必要なすべてのファイルがアプリのルートにある .local ファイルの下に置かれます。これをダウンロードして、git リポジトリと、stapler ユーティリティに追加しました。最後に、pdftk の代わりにホッチキスを使用するようにコードを更新しました。再び Heroku から PDF を分割します。

おそらくよりクリーンな別の方法は、それをgemにカプセル化することです(http://news.ycombinator.com/item?id=2816783

于 2011-12-22T15:24:29.520 に答える
0

エビを試してみてください。

于 2011-08-20T01:15:34.347 に答える