ruby 1.9 3 с пассажирской версией 3.0.12 - Tempfile вызывает "Нет такого файла или каталога" *.lock при попытке выполнить rmdir
Я думаю, что ruby 1.9.3 не может создать временный файл в каталоге /tmp. Проблема с сообщением об ошибке:
Status: 500 Internal Server Error No such file or directory /tmp/RackRewindableInput20121031-8340-1qko694.lock
/lib/ruby/1.9.1/tempfile.rb:346:in rmdir'
/lib/ruby/1.9.1/tempfile.rb:346:in rmdir'
/lib/ruby/1.9.1/tempfile.rb:338:in ensure in locking'
/lib/ruby/1.9.1/tempfile.rb:338:in locking'
/lib/ruby/1.9.1/tempfile.rb:144:in block in initialize'
/lib/ruby/1.9.1/tmpdir.rb:133:in create'
/lib/ruby/1.9.1/tempfile.rb:134:in initialize'
/lib/ruby/gems/1.9.1/gems/passenger-3.0.12/lib/phusion_passenger/utils/rewindable_input.rb:86:in new'
1 ответ
Сообщая о той же ошибке, это происходит, когда я пытаюсь сгенерировать PDF-файл, используя prince xml:
Прекрасно работает на локальной машине, при разработке и производстве работает webrick, но пассажир вызывает сбой.
Вот мой след (короткая версия):
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, что происходит, когда файлы конфигурации принадлежат пользователю root.
Установка следующего в вашей Apache/ пассажирской конфигурации заставляет это работать
PassengerDefaultUser www-data # should be same as apache user
Настройка всех файлов / папок, которые используются приложением apache/rails, на
chown www-data:www-data
(В моем случае это был chown -R tmp /).
ПРИМЕЧАНИЕ: я думаю, что на самом деле ошибка происходит, когда ruby пытается на самом деле записать временный файл, но, очевидно, в этот момент ошибки не возникает. на следующем шаге ruby пытается удалить несуществующий временный файл и вылетает.
Надеюсь, это помогло!