carrierwave-postgresql
carrierwave-postgresql copied to clipboard
lo_unlink failed
After I delete model from DB, carrierwave-postgresql
tries to call lo_unlink
but there is no object with this oid
in db already.
I am usin ActiveAdmin. It can be related.
PG::Error - lo_unlink failed:
carrierwave-postgresql (0.1.5) lib/carrierwave/storage/postgresql_lo.rb:34:in `delete'
carrierwave (0.10.0) lib/carrierwave/uploader/remove.rb:15:in `block in remove!'
carrierwave (0.10.0) lib/carrierwave/uploader/callbacks.rb:17:in `with_callbacks'
carrierwave (0.10.0) lib/carrierwave/uploader/remove.rb:14:in `remove!'
carrierwave (0.10.0) lib/carrierwave/uploader/versions.rb:289:in `block in remove_versions!'
carrierwave (0.10.0) lib/carrierwave/uploader/versions.rb:289:in `remove_versions!'
carrierwave (0.10.0) lib/carrierwave/uploader/callbacks.rb:18:in `block in with_callbacks'
carrierwave (0.10.0) lib/carrierwave/uploader/callbacks.rb:18:in `with_callbacks'
carrierwave (0.10.0) lib/carrierwave/uploader/remove.rb:14:in `remove!'
carrierwave (0.10.0) lib/carrierwave/mount.rb:392:in `remove!'
carrierwave (0.10.0) lib/carrierwave/mount.rb:195:in `remove_image!'
carrierwave (0.10.0) lib/carrierwave/orm/activerecord.rb:49:in `remove_image!'
activesupport (4.2.4) lib/active_support/callbacks.rb:432:in `block in make_lambda'
activesupport (4.2.4) lib/active_support/callbacks.rb:253:in `block in conditional'
activesupport (4.2.4) lib/active_support/callbacks.rb:506:in `block in call'
activesupport (4.2.4) lib/active_support/callbacks.rb:506:in `call'
activesupport (4.2.4) lib/active_support/callbacks.rb:92:in `__run_callbacks__'
activesupport (4.2.4) lib/active_support/callbacks.rb:778:in `_run_commit_callbacks'
activerecord (4.2.4) lib/active_record/transactions.rb:314:in `committed!'
activerecord (4.2.4) lib/active_record/connection_adapters/abstract/transaction.rb:89:in `commit_records'
activerecord (4.2.4) lib/active_record/connection_adapters/abstract/transaction.rb:153:in `commit'
activerecord (4.2.4) lib/active_record/connection_adapters/abstract/transaction.rb:175:in `commit_transaction'
activerecord (4.2.4) lib/active_record/connection_adapters/abstract/transaction.rb:194:in `within_new_transaction'
activerecord (4.2.4) lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction'
activerecord (4.2.4) lib/active_record/transactions.rb:220:in `transaction'
activerecord (4.2.4) lib/active_record/transactions.rb:348:in `with_transaction_returning_status'
activerecord (4.2.4) lib/active_record/transactions.rb:281:in `destroy'
() home/yevhene/.rvm/gems/ruby-2.2.3@footstock/bundler/gems/activeadmin-06bf79c58216/lib/active_admin/resource_controller/data_access.rb:190:in `block in destroy_resource'
activesupport (4.2.4) lib/active_support/core_ext/object/try.rb:77:in `try!'
activesupport (4.2.4) lib/active_support/core_ext/object/try.rb:63:in `try'
() home/yevhene/.rvm/gems/ruby-2.2.3@footstock/bundler/gems/activeadmin-06bf79c58216/lib/active_admin/callbacks.rb:79:in `block (2 levels) in define_active_admin_callbacks'
() home/yevhene/.rvm/gems/ruby-2.2.3@footstock/bundler/gems/activeadmin-06bf79c58216/lib/active_admin/resource_controller/data_access.rb:189:in `destroy_resource'
inherited_resources (1.6.0) lib/inherited_resources/actions.rb:58:in `destroy'
actionpack (4.2.4) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (4.2.4) lib/abstract_controller/base.rb:198:in `process_action'
actionpack (4.2.4) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (4.2.4) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
activesupport (4.2.4) lib/active_support/callbacks.rb:117:in `call'
activesupport (4.2.4) lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'
activesupport (4.2.4) lib/active_support/callbacks.rb:505:in `call'
activesupport (4.2.4) lib/active_support/callbacks.rb:92:in `__run_callbacks__'
activesupport (4.2.4) lib/active_support/callbacks.rb:778:in `_run_process_action_callbacks'
activesupport (4.2.4) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (4.2.4) lib/abstract_controller/callbacks.rb:19:in `process_action'
actionpack (4.2.4) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (4.2.4) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
activesupport (4.2.4) lib/active_support/notifications.rb:164:in `block in instrument'
activesupport (4.2.4) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (4.2.4) lib/active_support/notifications.rb:164:in `instrument'
actionpack (4.2.4) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (4.2.4) lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
activerecord (4.2.4) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (4.2.4) lib/abstract_controller/base.rb:137:in `process'
actionview (4.2.4) lib/action_view/rendering.rb:30:in `process'
actionpack (4.2.4) lib/action_controller/metal.rb:196:in `dispatch'
actionpack (4.2.4) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
actionpack (4.2.4) lib/action_controller/metal.rb:237:in `block in action'
actionpack (4.2.4) lib/action_dispatch/routing/route_set.rb:76:in `dispatch'
actionpack (4.2.4) lib/action_dispatch/routing/route_set.rb:45:in `serve'
actionpack (4.2.4) lib/action_dispatch/journey/router.rb:43:in `block in serve'
actionpack (4.2.4) lib/action_dispatch/journey/router.rb:30:in `serve'
actionpack (4.2.4) lib/action_dispatch/routing/route_set.rb:821:in `call'
bullet (4.14.7) lib/bullet/rack.rb:10:in `call'
warden (1.2.3) lib/warden/manager.rb:35:in `block in call'
warden (1.2.3) lib/warden/manager.rb:34:in `call'
rack (1.6.4) lib/rack/etag.rb:24:in `call'
rack (1.6.4) lib/rack/conditionalget.rb:38:in `call'
rack (1.6.4) lib/rack/head.rb:13:in `call'
actionpack (4.2.4) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
actionpack (4.2.4) lib/action_dispatch/middleware/flash.rb:260:in `call'
rack (1.6.4) lib/rack/session/abstract/id.rb:225:in `context'
rack (1.6.4) lib/rack/session/abstract/id.rb:220:in `call'
actionpack (4.2.4) lib/action_dispatch/middleware/cookies.rb:560:in `call'
activerecord (4.2.4) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.2.4) lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in `call'
activerecord (4.2.4) lib/active_record/migration.rb:377:in `call'
actionpack (4.2.4) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.2.4) lib/active_support/callbacks.rb:88:in `__run_callbacks__'
activesupport (4.2.4) lib/active_support/callbacks.rb:778:in `_run_call_callbacks'
activesupport (4.2.4) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (4.2.4) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.2.4) lib/action_dispatch/middleware/reloader.rb:73:in `call'
actionpack (4.2.4) lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
better_errors (2.1.1) lib/better_errors/middleware.rb:84:in `protected_app_call'
better_errors (2.1.1) lib/better_errors/middleware.rb:79:in `better_errors_call'
better_errors (2.1.1) lib/better_errors/middleware.rb:57:in `call'
actionpack (4.2.4) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
actionpack (4.2.4) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.2.4) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.2.4) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.2.4) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.2.4) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.2.4) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.2.4) lib/rails/rack/logger.rb:20:in `call'
quiet_assets (1.1.0) lib/quiet_assets.rb:27:in `call_with_quiet_assets'
actionpack (4.2.4) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.6.4) lib/rack/methodoverride.rb:22:in `call'
rack (1.6.4) lib/rack/runtime.rb:18:in `call'
activesupport (4.2.4) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
rack (1.6.4) lib/rack/lock.rb:17:in `call'
actionpack (4.2.4) lib/action_dispatch/middleware/static.rb:116:in `call'
rack (1.6.4) lib/rack/sendfile.rb:113:in `call'
railties (4.2.4) lib/rails/engine.rb:518:in `call'
railties (4.2.4) lib/rails/application.rb:165:in `call'
rack (1.6.4) lib/rack/content_length.rb:15:in `call'
thin (1.6.4) lib/thin/connection.rb:86:in `block in pre_process'
thin (1.6.4) lib/thin/connection.rb:84:in `pre_process'
thin (1.6.4) lib/thin/connection.rb:53:in `process'
thin (1.6.4) lib/thin/connection.rb:39:in `receive_data'
eventmachine (1.0.8) lib/eventmachine.rb:193:in `run'
thin (1.6.4) lib/thin/backends/base.rb:73:in `start'
thin (1.6.4) lib/thin/server.rb:162:in `start'
rack (1.6.4) lib/rack/handler/thin.rb:19:in `run'
rack (1.6.4) lib/rack/server.rb:286:in `start'
railties (4.2.4) lib/rails/commands/server.rb:80:in `start'
railties (4.2.4) lib/rails/commands/commands_tasks.rb:80:in `block in server'
railties (4.2.4) lib/rails/commands/commands_tasks.rb:75:in `server'
railties (4.2.4) lib/rails/commands/commands_tasks.rb:39:in `run_command!'
railties (4.2.4) lib/rails/commands.rb:17:in `<top (required)>'
bin/rails:8:in `<top (required)>'
spring (1.4.0) lib/spring/client/rails.rb:28:in `call'
spring (1.4.0) lib/spring/client/command.rb:7:in `call'
spring (1.4.0) lib/spring/client.rb:28:in `run'
spring (1.4.0) bin/spring:49:in `<top (required)>'
spring (1.4.0) lib/spring/binstub.rb:11:in `<top (required)>'
/home/yevhene/.rvm/rubies/ruby-2.2.3/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
bin/spring:13:in `<top (required)>'
bin/rails:3:in `<main>'
$ tail -f /var/log/postgresql/postgresql-9.4-main.log
2015-10-10 14:39:59 EEST [16842-9] postgres@footstock_develop ERROR: large object 1179618 does not exist
Did you expect the error to be treated in a different way? Or the problem is that this is happening all deletes? If is the later, are you sure the large objects are there before the dele command?
This is happening all deletes. LO is accessible before destroy.
I'll look into it. If you could send some code for a failing spec that would be very helpful :D
Is there any update in this matter? I am facing the same problem.
@ppfp no, sorry. I am moved to simple file storage. (S3 - is alternative).
@ppfp I'm not currently using this code, but if someone provides a failing spec I'd be glad to fix it.
I bypassed the issue by first assigning model instance oid to nil, then saving, then running vacuum_lo then destroying. I do not know how expensive the vacuum_lo operation is, but I think it is fine for my use-case.
Also had this issue, I found that lo_unlink
triggered two times, at first in after_save
callback, and second inafter_commit
callback => so oid is not present at the last call and it fails to delete object.
Has this issue been fixed? When I try to use model.destroy_all, I receive PG::Error: lo_unlink failed. How can I avoid this error in both cases of removing one object and destroying all objects that relate to a particular model instance?