Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveStorage-Safari缓存的附件_Ruby On Rails_Ruby_Vue.js_Rails Activestorage - Fatal编程技术网

Ruby on rails ActiveStorage-Safari缓存的附件

Ruby on rails ActiveStorage-Safari缓存的附件,ruby-on-rails,ruby,vue.js,rails-activestorage,Ruby On Rails,Ruby,Vue.js,Rails Activestorage,我将ActiveStorage与默认磁盘服务一起使用。MyAPI返回图像URL,在前端(Vue.js)中,图像通过IMG标记嵌入。当我打开图像URL时,图像显示正确 呈现json:{ image\u url:rails\u blob\u path(user.photo,仅\u path:true), .... } 当我查看源代码时,Safari一直试图调用旧的URL。这在5分钟后就不可能了。 我已尝试在中直接在初始值设定项中设置config.active\u storage.service

我将ActiveStorage与默认磁盘服务一起使用。MyAPI返回图像URL,在前端(Vue.js)中,图像通过IMG标记嵌入。当我打开图像URL时,图像显示正确

呈现json:{
image\u url:rails\u blob\u path(user.photo,仅\u path:true),
....
}

当我查看源代码时,Safari一直试图调用旧的URL。这在5分钟后就不可能了。 我已尝试在中直接在初始值设定项中设置
config.active\u storage.service\u url\u expire\u,但这没有效果:

#config/initializers/active_storage.rb
Rails.application.config.active\u storage.service\u url\u expire\u in=1.5周
当我将图像放置为默认rails时,图像会获得不同的URL,并且不会过期:

image\u标签(user.photo)
# => 
rails\u blob\u路径(user.photo,仅\u路径:true)
#=>“../rails/active_storage/blobs/eyjfcmfpbhmionsibwzc2fnzsi6ikjbahbkqt09iiwizxhwijpudwxslcjwdxiioijibg9ix2lkin19--23e3b6283c346c75d7e6c1e769eacb6d428fec0e/user_photo.png”
我是否可能在api中使用image_标记的URL

Ruby版本:2.7.0


Rails版本:6.0.2.2

我也遇到了同样的问题,因此我以以下解决方案结束

您的系统可能会有所不同,因为我对每个图像都有一个图像模型,以便能够将图像重新用于其他条目

因此,我在图像模型中添加了一个唯一的标记和一个
媒体路径。
得到

媒体控制器:

def显示
返回头:如果origin.blank未找到?
发送文件路径,类型:origin.content\u类型,处置::inline
救援行动控制器::丢失文件,命名错误
将_重定向到回退
结束
私有的
def来源
@origin | |=Image.find_by(token:params[:token])
结束
def路径
@路径| |=原点。本地路径(参数[:大小])
结束
...
图片:

。。。
def本地_路径(大小=:中等)
img=图像大小(大小)
ActiveStorage::如果img.present存在,(img.key)的Blob.service.path_?
结束
def内容类型
file.blob和.content|type | |“image/png”
结束
...
image\u with_size
仅返回请求的文件变体。

也许我的方法对您的系统也有帮助。

如果您需要获取服务url而不是表示url(通过
url\u for
image\u标签
),请使用
service\u url
方法:

user.photo.service_url
对于变体:

user.photo.variant(resize_to_limit: [320, nil]).processed.service_url
processed
方法确保创建应用于原始版本的变体转换并将其上载到服务

如果您使用的是本地
磁盘
服务,则应手动设置
ActiveStorage::Current.host
,或者调用该方法的自定义控制器中应包含
ActiveStorage::SetCurrent
问题


但是关于公开服务url存在争议,Rails建议对(variant)

使用
user.photo.service\u url
。它对我有用