ruby-on-rails - Rails 5 - 活动存储 - 变体 - 例外:“#
Rails 5.2.0(作为 API)
/config/application.rb
config.active_storage.variant_processor = :vips
问题描述
Rails 5.2.0(作为 API)
/config/application.rb
config.active_storage.variant_processor = :vips
问题:
/serializers/api/v1/user/current_user_serializer.rb
class Api::V1::User::CurrentUserSerializer < Api::V1::User::BaseSerializer
include Rails.application.routes.url_helpers
attributes(
[...]
:avatar
:created_at
)
def avatar
if object.avatar.attachment
avatar = {
image: url_for( object.avatar ), # This one works
thumb: url_for( object.avatar.variant(resize_to_fit: [800, 800]) ), # EXCEPTION
thumb_test: url_for( object.avatar.variant(resize: '800x800') ) # Returns image of size: 640x800 (expected 800x800)
}
end
end
end
我得到以下异常:
exception: "<MiniMagick::Error: `mogrify -resize-to-fit [800, 800] /tmp/mini_magick20180625-19749-rghjbg.jpg` failed with error: mogrify.im6: unrecognized option `-resize-to-fit' @ error/mogrify.c/MogrifyImageCommand/5519. >"
编辑
谢谢@George Claghorn
我现在根据这篇文章创建了自己的变体:
https ://prograils.com/posts/rails-5-2-active-storage-new-approach-to-file-uploads
lib/active_storage_variants.rb
class ActiveStorageVariants
class << self
def resize_to_fill(width:, height:, blob:, gravity: 'Center')
blob.analyze unless blob.analyzed?
cols = blob.metadata[:width].to_f
rows = blob.metadata[:height].to_f
if width != cols || height != rows
scale_x = width / cols
scale_y = height / rows
if scale_x >= scale_y
cols = (scale_x * (cols + 0.5)).round
resize = cols.to_s
else
rows = (scale_y * (rows + 0.5)).round
resize = "x#{rows}"
end
end
{
resize: resize,
gravity: gravity,
background: 'rgba(255,255,255,0.0)',
extent: cols != width || rows != height ? "#{width}x#{height}" : ''
}.merge(optimize_hash(blob))
end
end
end
/models/concerns/users/active_storage_variants.rb
require 'active_storage_variants' # /lib/active_storage_variants.rb
module Users::ActiveStorageVariants
def avatar_thumbnail
variation = ActiveStorage::Variation.new(
ActiveStorageVariants.resize_to_fill(
width: 300, height: 300, blob: avatar.blob
)
)
ActiveStorage::Variant.new(avatar.blob, variation)
end
end
/models/user.rb
class User < ApplicationRecord
...
## Concerns
include Users::ActiveStorageVariants
...
end
调用它:
user.avatar_thumbnail
重新运行单元格时,Jupyter 笔记本非常慢
我有一个相对较大的 Jupyter/Notebook(RAM 中有大约 40GB 的 Pandas DF)。我正在运行与 Conda 一起安装的 Python 3.6 内核。
我正在执行大约 115 个单元格。如果我重新启动内核并运行单元,我的整个笔记本电脑将在大约 3 分钟内运行。如果我重新运行一个没有做太多工作的简单单元(即函数定义),则执行需要很长时间(约 15 分钟)。
我在网上找不到任何具有 Jupyer 笔记本安装最佳实践的文档。我的磁盘使用率很低,可用 RAM 很高,CPU 负载很低。
我的交换空间似乎已用尽,但我不确定是什么原因造成的。
关于对性能不佳的 Jupyter 笔记本服务器进行故障排除的任何建议?这似乎仅与重新运行单元有关。
解决方案
resize_to_fit: [800, 800]
是一个图像处理转换。Rails 5.2 不使用 ImageProcessing,因此不支持 libvips;它直接使用 MiniMagick。
Rails 6 将切换到 ImageProcessing 并添加 libvips 支持。现在要使用 libvips,在 Rails 6 发布之前,捆绑 GitHub 上 rails/rails 存储库的 master 分支:
# Gemfile
gem "rails", github: "rails/rails"
推荐阅读
- sql-server - SQL MERGE 代替 INSERT - 优化
- r - 在 ggplot 中使用 stat_density_2d 的求和因子的密度图
- ios - 在 ContainerView 内的 UICollectionView 中计算单元格宽度
- c# - Monogame 中的小行星克隆生成具有相同位置、旋转和方向的小行星
- php - 来自定义的应用程序访问的 Bitnami 应用程序插入查询
- html - 避免浏览器打印出现空白页
- jquery - jQuery 选择器在 Gmail 中的 COMPOSE 下方添加按钮
- vue.js - vue.js - 更新时关闭模式
- python - 正则表达式 (Python) - 匹配具有两个或多个不同元音的单词
- java - 如何正确地从数组中获取索引并对其进行一些操作?
Rails 5.2.0(作为 API)
/config/application.rb
config.active_storage.variant_processor = :vips
问题描述
Rails 5.2.0(作为 API)
/config/application.rb
config.active_storage.variant_processor = :vips
问题:
/serializers/api/v1/user/current_user_serializer.rb
class Api::V1::User::CurrentUserSerializer < Api::V1::User::BaseSerializer
include Rails.application.routes.url_helpers
attributes(
[...]
:avatar
:created_at
)
def avatar
if object.avatar.attachment
avatar = {
image: url_for( object.avatar ), # This one works
thumb: url_for( object.avatar.variant(resize_to_fit: [800, 800]) ), # EXCEPTION
thumb_test: url_for( object.avatar.variant(resize: '800x800') ) # Returns image of size: 640x800 (expected 800x800)
}
end
end
end
我得到以下异常:
exception: "<MiniMagick::Error: `mogrify -resize-to-fit [800, 800] /tmp/mini_magick20180625-19749-rghjbg.jpg` failed with error: mogrify.im6: unrecognized option `-resize-to-fit' @ error/mogrify.c/MogrifyImageCommand/5519. >"
编辑
谢谢@George Claghorn
我现在根据这篇文章创建了自己的变体: https ://prograils.com/posts/rails-5-2-active-storage-new-approach-to-file-uploads
lib/active_storage_variants.rb
class ActiveStorageVariants
class << self
def resize_to_fill(width:, height:, blob:, gravity: 'Center')
blob.analyze unless blob.analyzed?
cols = blob.metadata[:width].to_f
rows = blob.metadata[:height].to_f
if width != cols || height != rows
scale_x = width / cols
scale_y = height / rows
if scale_x >= scale_y
cols = (scale_x * (cols + 0.5)).round
resize = cols.to_s
else
rows = (scale_y * (rows + 0.5)).round
resize = "x#{rows}"
end
end
{
resize: resize,
gravity: gravity,
background: 'rgba(255,255,255,0.0)',
extent: cols != width || rows != height ? "#{width}x#{height}" : ''
}.merge(optimize_hash(blob))
end
end
end
/models/concerns/users/active_storage_variants.rb
require 'active_storage_variants' # /lib/active_storage_variants.rb
module Users::ActiveStorageVariants
def avatar_thumbnail
variation = ActiveStorage::Variation.new(
ActiveStorageVariants.resize_to_fill(
width: 300, height: 300, blob: avatar.blob
)
)
ActiveStorage::Variant.new(avatar.blob, variation)
end
end
/models/user.rb
class User < ApplicationRecord
...
## Concerns
include Users::ActiveStorageVariants
...
end
调用它:
user.avatar_thumbnail
重新运行单元格时,Jupyter 笔记本非常慢
我有一个相对较大的 Jupyter/Notebook(RAM 中有大约 40GB 的 Pandas DF)。我正在运行与 Conda 一起安装的 Python 3.6 内核。
我正在执行大约 115 个单元格。如果我重新启动内核并运行单元,我的整个笔记本电脑将在大约 3 分钟内运行。如果我重新运行一个没有做太多工作的简单单元(即函数定义),则执行需要很长时间(约 15 分钟)。
我在网上找不到任何具有 Jupyer 笔记本安装最佳实践的文档。我的磁盘使用率很低,可用 RAM 很高,CPU 负载很低。
我的交换空间似乎已用尽,但我不确定是什么原因造成的。
关于对性能不佳的 Jupyter 笔记本服务器进行故障排除的任何建议?这似乎仅与重新运行单元有关。
解决方案
resize_to_fit: [800, 800]
是一个图像处理转换。Rails 5.2 不使用 ImageProcessing,因此不支持 libvips;它直接使用 MiniMagick。
Rails 6 将切换到 ImageProcessing 并添加 libvips 支持。现在要使用 libvips,在 Rails 6 发布之前,捆绑 GitHub 上 rails/rails 存储库的 master 分支:
# Gemfile
gem "rails", github: "rails/rails"
推荐阅读
- sql-server - SQL MERGE 代替 INSERT - 优化
- r - 在 ggplot 中使用 stat_density_2d 的求和因子的密度图
- ios - 在 ContainerView 内的 UICollectionView 中计算单元格宽度
- c# - Monogame 中的小行星克隆生成具有相同位置、旋转和方向的小行星
- php - 来自定义的应用程序访问的 Bitnami 应用程序插入查询
- html - 避免浏览器打印出现空白页
- jquery - jQuery 选择器在 Gmail 中的 COMPOSE 下方添加按钮
- vue.js - vue.js - 更新时关闭模式
- python - 正则表达式 (Python) - 匹配具有两个或多个不同元音的单词
- java - 如何正确地从数组中获取索引并对其进行一些操作?