Ruby on Rails - 可以通过/ app / assets / images中的表单保存图像吗?

时间:2018-03-16 11:44:01

标签: ruby-on-rails image file

我正在为一家销售二手车的小商店开发一个小型的Ruby on Rails应用程序。该网站包含一个列表,其中包含所有可用的汽车,包括汽车的图像。商店里最多有20辆汽车。

我读到,将图像直接保存在数据库中不是最佳做法,最好使用Amazon Web Services等云存储服务存储文件,但我不认为这样的服务对于一次最多包含20个图像的小型网站是必要的。

我的想法是将图片保存在/app/assets/images中。员工将通过表格上传汽车的信息和图像。是否可以通过Rails中的表单上传和保存文件夹/app/assets/images中的图像?

2 个答案:

答案 0 :(得分:3)

  

是否可以通过Rails中的表单在/app/assets/images文件夹中上传和保存图像?

可能,但不应该这样做。 /app/assets/images适用于您的应用资产。它们在部署时进行处理(指纹识别等)。您不需要对用户文件进行此处理。

用户上传通常会在/public的某处。例如,/public/uploads/images

  

但我不认为这样的服务对于一次最多包含20张图片的小型网站来说是不必要的

Amazon S3有免费套餐。你的20张图片肯定适合那里。是的,设置起来有点复杂,但 是最佳实践。

答案 1 :(得分:2)

  

正如@Sergio已经提到过资产文件夹和AWS S3服务。

AWS很好,但仅限于1年免费套餐和高达5GB。

云图像存储的替代解决方案是Cloudinary。它的终身免费<10GB,包含带宽,Link: How to use in Rails samples

#Gemfile
gem 'cloudinary'
gem 'carrierwave'


# config/initializers/cloudinary.rb, if not exist create the file
# make sure to fill api keys!!!
Cloudinary.config do |config|
  config.cloud_name = ....
  config.api_key    = ....
  config.api_secret = ....
  config.cdn_subdomain = false
end


# model/image.rb in my case.
class Image < ActiveRecord::Base
    mount_uploader :image, ImageUploader
end


# app/uploaders/image_uploader.rb
class ImageUploader < CarrierWave::Uploader::Base

    include CarrierWave::MiniMagick
    include CarrierWave::ImageOptimizer
    include Cloudinary::CarrierWave

    process :convert => 'png'
    # process :tags => ['team_registration']
    # process :resize_to_fill => [300, 300, :north]

    def store_dir
        # "images/#{model.class.to_s.underscore}/#{model.team_name}"
        "images/car_images/"
    end

    def public_id
        "yr_domain_name_here/car_images/#{model.team_name}"
    end  

    def cache_dir
        "/tmp/cache/#{model.class.to_s.underscore}"
    end

    def filename
        "#{model.team_name}_#{model.game.title}" + ".png" if original_filename.present?
    end

    def content_type_whitelist
        /image\//
    end

    def extension_white_list
        %w(jpg jpeg gif png)
    end

end