如何使Paperclip在开发时只读? (防止上传/删除/覆盖)

时间:2012-08-22 08:34:08

标签: ruby-on-rails paperclip

我的生产和开发数据库有些同步,因此开发可以从生产路径中读取图像(S3)。

问题是当我在开发时删除,更新或创建记录时,它会影响S3图像。

我不希望这种行为在开发时发生,但它应该在生产中发生。

是否可以选择将回形针转换为只读模式?我仍然希望看到S3中的图像(而不是404图像)。

我看到:preserve_files选项可以保护删除。是否有保护覆盖/禁用上传的选项?

2 个答案:

答案 0 :(得分:1)

对于未来的版本来说,不完整,丑陋且不安全,但同时也能完成这项任务。

config/initializers/paperclip.rb

if Rails.env.development?
  module Paperclip
    class Attachment
      def assign uploaded_file
      end

      def save
      end

      def clear(*)
      end

      def destroy
      end

      private
      def post_process(*)
      end

      def post_process_styles(*)
      end

      def post_process_style(*)
      end

      def queue_some_for_delete(*)
      end

      def queue_all_for_delete
      end

      def after_flush_writes
      end
    end
  end
end

答案 1 :(得分:0)

假设您需要在开发中使用生产数据,我认为创建一个用户只能读取某些 S3 资源的“用户策略”会更有意义。然后相应地更改您的环境变量 https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html

然后,您可以处理开发中的错误(如果您尝试使用只读权限进行更新,S3 客户端应该会失败)。这可确保您无法触摸生产中的任何东西

例如(伪代码),

if Rails.env.development?
  // do not update
else
  Model.attachment.assign()
end