加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何根据环境配置回形针以保存到不同的目录

发布时间:2020-12-17 03:54:24 所属栏目:百科 来源:网络整理
导读:我正在合作一个应用程序,偶尔会遇到麻烦,原因是最初的开发人员在 linux上工作,我在OSX.我目前的问题与使用 ImageMagik和paperclip上传图像有关.当我尝试将图片上传到应用程序时,我收到以下消息. Permission denied - /assets 我很确定这意味着该应用程序想要
我正在合作一个应用程序,偶尔会遇到麻烦,原因是最初的开发人员在 linux上工作,我在OSX.我目前的问题与使用 ImageMagik和paperclip上传图像有关.当我尝试将图片上传到应用程序时,我收到以下消息.

Permission denied - /assets

我很确定这意味着该应用程序想要将图像保存在资产目录中的某个位置,但不能,因为它在我的计算机上不存在.

在模型中,这是解决图片的代码.

has_attached_file :avatar,:url  => "/avatars/:id?style=:style",:styles => { :large => "190x190#",:medium => "70x70#",:thumb => "106x106#" },:path => "/assets/rob/images/Users/:id/:style/:basename.:extension"

现在,我假设这个目录存在于原始程序员的计算机上以及托管站点的任何地方.但是我没有那个目录,所以我这样做了:

:path => "~/robotimus/dev_images/:id/:style/:basename.:extension"

但是现在我陷入困境,因为在部署之前我最终还是要恢复那条线.作为解决方案,我可以编写这样的方法.

def images_path
  Rails.env.production? ? "/assets/rob/images/Users/" : "~/robotimus/dev_images"
end

然后:path行看起来像这样:

:path => images_path + "/:id/:style/:basename.:extension"

这听起来像个好主意吗?此外,该方法应存储在何处?我的猜测是它属于config / environment.rb,但我想得到专家的意见.

解决方法

我在一段时间内对一个项目做了类似的事情,在开发中我将图像存储在本地,但在生产环境中,它们存储在Amazon S3上.

我做的是我创建了一个config / paperclip.yml.

# config/paperclip.yml
common: &common
  :styles:
    :thumb: "50x50#"
    :small: "80x80#"
    :medium: "200x150#"
    :normal: "320x240#"
    :large: "800x600#"
  :default_url: "/images/default_image.png"


development:
  <<: *common

production:
  <<: *common
  :storage: :s3
  :bucket: "your-bucket-name"
  :path: "/:some/:path/:id"
  :url: "s3_domain_url

test:
  <<: *common

然后我将该文件加载到我的app配置中:

# config/initializers/config.rb
require 'ostruct'

def load_config_yaml(config_file)
  YAML.load(File.read(Rails.root.join('config',config_file)))[Rails.env]
end

AppConfig = OpenStruct.new(load_config_yaml('application.yml'))

AppConfig.paperclip = load_config_yaml('paperclip.yml')

然后我刚用AppConfig.paperclip提供了has_attached_file调用.

# app/models/image.rb
class Image < ActiveRecord::Base
  has_attached_file :photo,AppConfig.paperclip
end

因此,如果您想将文件存储在不同的路径中(但仍然在本地),请不要使用s3-stuff.

你当然可以跳过大部分的配置内容,只是在某个配置中设置图像路径,如果你不想全押这个想法,但我喜欢将配置分开.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读