Prince xml を使用して pdf ファイルを生成しようとすると、同じエラーが報告されます。
Webrick を実行しているローカル マシン、開発および運用では問題なく動作しますが、パッセンジャーがクラッシュを引き起こします。
Heres 私のバックトレース (短いバージョン):
Compiled print/print_core.css (1ms) (pid 14275)
Completed 500 Internal Server Error in 236ms
Errno::ENOENT (No such file or directory - /*** PATH DELETED ***/tmp/cache/assets/10948d89a043b6251405277a36d3e0e2.cache20130517-14275-1l2wvu7.lock):
/usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/tempfile.rb:346:in `rmdir'
/usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/tempfile.rb:346:in `rmdir'
/usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/tempfile.rb:338:in `ensure in locking'
/usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/tempfile.rb:338:in `locking'
/usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/tempfile.rb:144:in `block in initialize'
/usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/tmpdir.rb:133:in `create'
/usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/tempfile.rb:134:in `initialize'
activesupport (3.2.9) lib/active_support/core_ext/file/atomic.rb:19:in `new'
activesupport (3.2.9) lib/active_support/core_ext/file/atomic.rb:19:in `atomic_write'
activesupport (3.2.9) lib/active_support/cache/file_store.rb:91:in `write_entry'
activesupport (3.2.9) lib/active_support/cache/strategy/local_cache.rb:140:in `write_entry'
activesupport (3.2.9) lib/active_support/cache.rb:364:in `block in write'
activesupport (3.2.9) lib/active_support/cache.rb:520:in `instrument'
activesupport (3.2.9) lib/active_support/cache.rb:362:in `write'
sprockets (2.2.2) lib/sprockets/caching.rb:90:in `cache_set'
sprockets (2.2.2) lib/sprockets/caching.rb:53:in `cache_set_hash'
sprockets (2.2.2) lib/sprockets/caching.rb:24:in `cache_asset'
sprockets (2.2.2) lib/sprockets/index.rb:92:in `build_asset'
sprockets (2.2.2) lib/sprockets/base.rb:169:in `find_asset'
sprockets (2.2.2) lib/sprockets/index.rb:60:in `find_asset'
sprockets (2.2.2) lib/sprockets/bundled_asset.rb:16:in `initialize'
sprockets (2.2.2) lib/sprockets/base.rb:252:in `new'
sprockets (2.2.2) lib/sprockets/base.rb:252:in `build_asset'
sprockets (2.2.2) lib/sprockets/index.rb:93:in `block in build_asset'
sprockets (2.2.2) lib/sprockets/caching.rb:19:in `cache_asset'
sprockets (2.2.2) lib/sprockets/index.rb:92:in `build_asset'
sprockets (2.2.2) lib/sprockets/base.rb:169:in `find_asset'
sprockets (2.2.2) lib/sprockets/index.rb:60:in `find_asset'
/var/www/*** PATH DELETED ***_core/lib/princely/pdf_helper.rb:83:in `asset_file_path'
/var/www/*** PATH DELETED ***_core/lib/princely/pdf_helper.rb:29:in `block in make_pdf'
/var/www/*** PATH DELETED ***_core/lib/princely/pdf_helper.rb:29:in `collect'
/var/www/*** PATH DELETED ***_core/lib/princely/pdf_helper.rb:29:in `make_pdf'
/var/www/*** PATH DELETED ***_core/lib/custom_pdf_helper.rb:28:in `make_pdf_with_defaults'
/var/www/*** PATH DELETED ***_core/lib/custom_pdf_helper.rb:59:in `make_tmp_pdf'
/var/www/*** PATH DELETED ***_concept/app/controllers/pdf_builder_controller.rb:171:in `build_pdf'
この問題は、ルートが構成ファイルを所有している場合に発生する、ユーザー「nobody」としてパッセンジャーが実行されている場合の権限の問題によって引き起こされます。
apache/passenger conf で次のように設定すると機能します
PassengerDefaultUser www-data # should be same as apache user
Apache/Rails アプリで使用するすべてのファイル/フォルダーを
chown www-data:www-data
(私の場合はchown -R tmp/)で機能します。
注:実際には、Ruby が実際に一時ファイルを書き込もうとしたときにエラーが発生していると思いますが、明らかに現時点ではエラーは発生していません。次のステップで、ruby は存在しない一時ファイルを削除しようとしてクラッシュしました。
それが役に立ったことを願っています!