Ruby on rails 定义运行等级库测试时曲别针在本地存储附件的位置

Ruby on rails 定义运行等级库测试时曲别针在本地存储附件的位置,ruby-on-rails,amazon-s3,paperclip,Ruby On Rails,Amazon S3,Paperclip,我使用AmazonS3在所有非测试环境中存储回形针附件 对于test,我特别使用本地路径/url设置来避免与S3远程交互 Paperclip::Attachment.default_options[:path] = ":rails_root/public/system/:rails_env/:class/:attachment/:id_partition/:filename" Paperclip::Attachment.default_options[:url] = "/system/

我使用AmazonS3在所有非测试环境中存储回形针附件

对于
test
,我特别使用本地路径/url设置来避免与S3远程交互

Paperclip::Attachment.default_options[:path] =
  ":rails_root/public/system/:rails_env/:class/:attachment/:id_partition/:filename"

Paperclip::Attachment.default_options[:url] =
  "/system/:rails_env/:class/:attachment/:id_partition/:filename"
我在模型中定义我的附件如下

has_attached_file :source_file, use_timestamp: false
在我的生产代码中,我需要使用
Model.source\u file.url
访问文件,因为
.url
返回文件的远程完全限定Amazon S3路径。这通常适用于非测试环境

但是,在我的
测试
环境中,我无法使用
.url
,因为回形针会在上面的
:path
定义的路径下创建并存储文件。所以我需要使用
.path
。如果我使用
.url
我会得到错误-

Errno::ENOENT:
  No such file or directory @ rb_sysopen - /system/test/imports/source_files/000/000/030/sample.txt
这是有道理的,因为回形针没有把文件放在那里

如何在
测试
环境中获取回形针,以便在
:url
路径下存储/创建文件,以便正确使用
.url

编辑:如果有帮助,在
测试
中,我从本地存储的夹具文件创建附件

factory :import do
  source_file { File.new(Rails.root + "spec/fixtures/files/sample.tsv") }
end
Edit2:将
:path
:url
设置为初始值设定项中的同一路径似乎是一个快速解决方案,但我正在开发一个有多个贡献者的更大应用程序,因此我没有必要这样做或打破任何其他人的规范。另外,Thoughtbot自己也推荐这种设置,所以应该有一种“正确”的方法让它按原样工作


谢谢

您是否尝试在测试环境中使用模拟S3,而不是直接将回形针写入本地文件?

您是否尝试在测试环境中使用模拟S3,而不是直接将回形针写入本地文件?

我认为这类问题是大多数ruby社区将回形针留给用户的原因像Carrierwave这样的单一工具在几年前就少了。我认为这类问题就是为什么ruby社区的大多数人在几年前把回形针留给了像Carrierwave这样的单一工具。这是一个很好的建议,谢谢。我没听说过。然而,这并不能解决核心问题——回形针被设计成本地存储,以绕过任何s3模拟库的需要。我希望不用求助于另一个图书馆/博物馆就可以使用它。这是一个很好的建议,谢谢。我没听说过。然而,这并不能解决核心问题——回形针被设计成本地存储,以绕过任何s3模拟库的需要。想让它工作而不必求助于另一个库/gem