ruby-on-rails - Ruby gem 写入文件系统的权限被拒绝 @ rb_sysopen
问题描述
红宝石 2.4.0
导轨 5.2.3
我有一个使用 Axlsx gem 生成 xlsx 报告的 Rails ActiveJob。当它尝试将文件写入文件系统时:
axlsx.serialize("#{Rails.root}/tmp/#{@report_name}.xlsx")
它给出了以下错误:Errno::EACCES (Permission denied @ rb_sysopen - /var/storage/my_app/releases/20200610141310/tmp/report_for_call_25_20200610142531.xlsx)
完整跟踪:
E,[2020-06-10T14:25:31.090477 #23375] 错误 -- : [ActiveJob] [GenerateReportJob] [013852d1-8127-4db4-90ae-895c998f34c7] 执行 GenerateReportJob 时出错(作业 ID:013852d1-8127-4db4-90ae -895c998f34c7) 异步(默认)在 30.2 毫秒内: Errno::EACCES(权限被拒绝@rb_sysopen - /var/storage/my_app/releases/20200610141310/tmp/report_for_call_25_20200610142531.xlsx): /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/rubyzip-1.3.0/lib/zip/output_stream.rb:36:in `initialize' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/rubyzip-1.3.0/lib/zip/output_stream.rb:36:in `new' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/rubyzip-1.3.0/lib/zip/output_stream.rb:36:in `initialize' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/rubyzip-1.3.0/lib/zip/output_stream.rb:52:in `new' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/rubyzip-1.3.0/lib/zip/output_stream.rb:52:in `open' /var/storage/my_app/shared/bundle/ruby/2.4.0/bundler/gems/axlsx-2891eb2246d9/lib/axlsx/package.rb:104:in `serialize' /var/storage/my_app/releases/20200610141310/lib/my_app/generate_xml_report.rb:87:in `create_excel' /var/storage/my_app/releases/20200610141310/lib/my_app/generate_xml_report.rb:59:in `generate_report' /var/storage/my_app/releases/20200610141310/app/jobs/generate_report_job.rb:6:in `执行' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activejob-5.2.3/lib/active_job/execution.rb:39:in `block in perform_now' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:109:in `block in run_callbacks' /var/storage/my_app/releases/20200610141310/app/jobs/generate_report_job.rb:23:in `around_report_job' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:118:in `block in run_callbacks' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/i18n-1.7.0/lib/i18n.rb:297:in `with_locale' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activejob-5.2.3/lib/active_job/translation.rb:9:in `block (2 levels) in ' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:118:in `instance_exec' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:118:in `block in run_callbacks' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activejob-5.2.3/lib/active_job/logging.rb:26:in `block (4 levels) in ' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/notifications.rb:168:in `block in instrument' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/notifications/instrumenter.rb:23:in `instrument' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/notifications.rb:168:in `instrument' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activejob-5.2.3/lib/active_job/logging.rb:25:in `block (3 levels) in ' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activejob-5.2.3/lib/active_job/logging.rb:46:in `block in tag_logger' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/tagged_logging.rb:71:in `block in tagged' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/tagged_logging.rb:28:in `tagged' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/tagged_logging.rb:71:in `tagged' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activejob-5.2.3/lib/active_job/logging.rb:46:in `tag_logger' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activejob-5.2.3/lib/active_job/logging.rb:22:in `block (2 levels) in ' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:118:in `instance_exec' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:118:in `block in run_callbacks' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:136:in `run_callbacks' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activejob-5.2.3/lib/active_job/execution.rb:38:in `perform_now' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activejob-5.2.3/lib/active_job/execution.rb:24:in `block in execute' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:109:in `block in run_callbacks' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activejob-5.2.3/lib/active_job/railtie.rb:28:in `block (4 levels) in ' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/execution_wrapper.rb:87:in `wrap' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/reloader.rb:73:in `block in wrap' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/execution_wrapper.rb:87:in `wrap' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/reloader.rb:72:in `wrap' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activejob-5.2.3/lib/active_job/railtie.rb:27:in `block (3 levels) in ' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:118:in `instance_exec' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:118:in `block in run_callbacks' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:136:in `run_callbacks' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activejob-5.2.3/lib/active_job/execution.rb:22:in `execute' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/activejob-5.2.3/lib/active_job/queue_adapters/async_adapter.rb:70:in `执行' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/ruby_thread_pool_executor.rb:348:in `run_task' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/ruby_thread_pool_executor.rb:337:in `block (3 levels) in create_worker' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/ruby_thread_pool_executor.rb:320:in `loop' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/ruby_thread_pool_executor.rb:320:in `block (2 levels) in create_worker' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/ruby_thread_pool_executor.rb:319:in `catch' /var/storage/my_app/shared/bundle/ruby/2.4.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/ruby_thread_pool_executor.rb:319:in `block in create_worker'
Rails 应用程序在用户“app”下运行。
tmp 文件夹的权限为:lrwxrwxrwx 1 app app
我也有一个开发服务器,基本上运行精确的设置,这个问题没有发生。
任何人都可以阐明为什么会这样吗?
解决方案
推荐阅读
- php - 上传图片“png”
- python - 无法使用for循环在python中通过matplotlib绘制十进制值
- pywikibot - 使用 pywikibot 的维基百科修订历史:修订大小(后续)
- r - 条件标签取决于 R 中 ggplot2 中自定义函数的输入
- tensorflow - 为什么 Google Colab TPU 和我的电脑一样慢?
- android - Flutter:在锁定屏幕上显示通知
- python - 如何创建已知的主机文件?
- python - 将 GeoJSON 文件解析为数据框会产生单个不需要的重复项,无法找到原因
- r - 使用 RCurl 通过 HTTP 获取目录的最后修改时间
- javascript - 如何在这个 JS 结构中仅将新类添加到第一个 DIV