【发布时间】:2018-08-29 07:31:55
【问题描述】:
给定一个具有 ActiveStorage 附件的模型
class MyObject
has_one_attached :avatar
end
在开发环境中,我可以将头像作为 StringIO 对象检索。
obj = MyObject.new( { valid params } )
file = File.open( Rails.root.join( "spec/support/images/test_image.jpg" ))
obj.avatar.attach( io: file, filename: "test_image.jpg" )
obj.save
version = obj.avatar.variant( resize: '200x200>').processed
version_url = Rails.application.routes.url_helpers.url_for( version )
download = open(version_url)
download.class
=> StringIO
当我尝试在测试环境中做同样的想法时,open(version_url) 返回
Errno::ECONNREFUSED Exception: Failed to open TCP connection to localhost:3000 (Connection refused - connect(2) for "localhost" port 3000)
有没有人在测试中成功下载了 activestorage 附件?我应该如何配置测试环境来实现这一点?
我的测试环境已经有了
config.active_storage.service = :test
Rails.application.routes.default_url_options = {host: "localhost:3000"}
我忽略了什么?
编辑
#storage.yml
test:
service: Disk
root: <%= Rails.root.join("tmp/storage") %>
【问题讨论】:
-
可能是这一行:
config.active_storage.service = :test吗?我相信service应该是您的storage.yml文件中定义的服务之一,而不是您正在运行的环境。所以config.active_storage.service = :local或它在开发中设置的任何东西都可以解决它。 -
感谢@rparr。我在 storage.yml 中定义了以下内容。这应该足够了吗?
test: service: Disk root: <%= Rails.root.join("tmp/storage") %> -
嗯,如果这是在您的
storage.yml文件中定义的,那么也许这不是问题。您是否有可能让您的开发服务器在localhost:3000同时运行测试?这可能是两个进程争夺同一个端口的错误。 -
我不认为是端口。至少,将 test.rb
default_url_options更改为“localhost:4999”并没有解决问题。还有什么我应该在这里尝试的吗? -
我想不出别的办法了。但您可能想看看 Carlos Ramirez III 的答案。
标签: ruby-on-rails rails-activestorage