使用回形针 gem Amazon S3 上传图像时出现 Aws 缺少区域错误
Aws missing region error when uploading image with paperclip gem Amazon S3
我对 rails 比较陌生。我让回形针 gem 在本地开发中运行良好,用户在注册时上传头像没有问题。我通过 Heroku 部署到生产环境,在注册时使用上传的图像创建用户时也没有错误,但所有上传的图像在生产环境中都显示为缺少缩略图。我读了一遍,显然在使用回形针的生产中我应该使用一种叫做 Amazon S3 的东西(如果有更好的方法请纠正我)所以我正在尝试这样做。
这是我在尝试使用上传的图片创建用户时遇到的错误:
Aws::Errors::MissingRegionError in Devise::RegistrationsController#create
missing region; use :region option or export region name to ENV['AWS_REGION']
这是我的生产和开发环境
config.paperclip_defaults = {
storage: :s3,
s3_host_name: 's3-ap-southeast-1.amazonaws.com',
s3_credentials: {
bucket: ENV['AWS_S3_BUCKET'],
s3_region: ENV['S3_REGION'],
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
}
}
这是我的 paperclip.rb 初始值设定项
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename'
Paperclip::Attachment.default_options[:s3_host_name] = 's3-ap-southeast-1.amazonaws.com'
注意(我在中东)
这是我的用户模型
#paperclip gem storing avatar images
has_attached_file :avatar,
:bucket => 'bucket_name',
:styles => {
:thumb => ['100x100#', :jpg, :quality => 70],
:preview => ['480x480#', :jpg, :quality => 70],
:large => ['600>', :jpg, :quality => 70],
:retina => ['1200>', :jpg, :quality => 30]
},
:convert_options => {
:thumb => '-set colorspace sRGB -strip',
:preview => '-set colorspace sRGB -strip',
:large => '-set colorspace sRGB -strip',
:retina => '-set colorspace sRGB -strip -sharpen 0x0.5'
}
我已经查找过有关 S3 Paperclip Gem 和缺少区域错误的问题,但从未见过这样的问题,即错误出在 Devise 控制器中。我认为这是因为 :avatar 与用户之间的关联是由设计控制的,而我没有单独的用户控制器。
我觉得应该有一种比使用这个亚马逊 S3 东西更简单的方法来解决生产中使用回形针 gem 丢失图像的问题。尤其是在没有 Amazon S3 的情况下一切都在本地正常运行的情况下。任何替代建议?想法?
您不一定要使用亚马逊服务来存储您的图像,但如果您在 Heroku 上托管,则无法在本地存储。这是因为 heroku 使用临时文件系统,因此您必须预料到您在本地存储的任何内容都可能随时消失。当你需要扩展你的应用程序时,这会让事情变得更容易,因为如果你启动新的 dynos,你不依赖任何本地存储(这也让 Heroku 的生活更轻松,因为他们不需要为所有的共享存储而烦恼应用程序的 dynos 应该安装)。
现在,回到 S3。首先,您确实有其他选择,如果您将 'fog' gem 与回形针一起使用,则可以相对容易地访问 number of storage providers。
不过,S3 是最常见的,您的问题应该可以通过定义 AWS_REGION
变量轻松解决。在 Heroku 上,您可以通过 运行 执行以下操作:
heroku config:set AWS_REGION=us-west-2
或者您使用的任何区域。
此外,上次我检查过回形针与 AWS SDK 2 不兼容,因此如果您遇到奇怪的问题,可以尝试在 Gemfile 中使用此命令切换回 SDK 1:
gem 'aws-sdk', '< 2.0'
我对 rails 比较陌生。我让回形针 gem 在本地开发中运行良好,用户在注册时上传头像没有问题。我通过 Heroku 部署到生产环境,在注册时使用上传的图像创建用户时也没有错误,但所有上传的图像在生产环境中都显示为缺少缩略图。我读了一遍,显然在使用回形针的生产中我应该使用一种叫做 Amazon S3 的东西(如果有更好的方法请纠正我)所以我正在尝试这样做。
这是我在尝试使用上传的图片创建用户时遇到的错误:
Aws::Errors::MissingRegionError in Devise::RegistrationsController#create
missing region; use :region option or export region name to ENV['AWS_REGION']
这是我的生产和开发环境
config.paperclip_defaults = {
storage: :s3,
s3_host_name: 's3-ap-southeast-1.amazonaws.com',
s3_credentials: {
bucket: ENV['AWS_S3_BUCKET'],
s3_region: ENV['S3_REGION'],
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
}
}
这是我的 paperclip.rb 初始值设定项
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename'
Paperclip::Attachment.default_options[:s3_host_name] = 's3-ap-southeast-1.amazonaws.com'
注意(我在中东)
这是我的用户模型
#paperclip gem storing avatar images
has_attached_file :avatar,
:bucket => 'bucket_name',
:styles => {
:thumb => ['100x100#', :jpg, :quality => 70],
:preview => ['480x480#', :jpg, :quality => 70],
:large => ['600>', :jpg, :quality => 70],
:retina => ['1200>', :jpg, :quality => 30]
},
:convert_options => {
:thumb => '-set colorspace sRGB -strip',
:preview => '-set colorspace sRGB -strip',
:large => '-set colorspace sRGB -strip',
:retina => '-set colorspace sRGB -strip -sharpen 0x0.5'
}
我已经查找过有关 S3 Paperclip Gem 和缺少区域错误的问题,但从未见过这样的问题,即错误出在 Devise 控制器中。我认为这是因为 :avatar 与用户之间的关联是由设计控制的,而我没有单独的用户控制器。
我觉得应该有一种比使用这个亚马逊 S3 东西更简单的方法来解决生产中使用回形针 gem 丢失图像的问题。尤其是在没有 Amazon S3 的情况下一切都在本地正常运行的情况下。任何替代建议?想法?
您不一定要使用亚马逊服务来存储您的图像,但如果您在 Heroku 上托管,则无法在本地存储。这是因为 heroku 使用临时文件系统,因此您必须预料到您在本地存储的任何内容都可能随时消失。当你需要扩展你的应用程序时,这会让事情变得更容易,因为如果你启动新的 dynos,你不依赖任何本地存储(这也让 Heroku 的生活更轻松,因为他们不需要为所有的共享存储而烦恼应用程序的 dynos 应该安装)。
现在,回到 S3。首先,您确实有其他选择,如果您将 'fog' gem 与回形针一起使用,则可以相对容易地访问 number of storage providers。
不过,S3 是最常见的,您的问题应该可以通过定义 AWS_REGION
变量轻松解决。在 Heroku 上,您可以通过 运行 执行以下操作:
heroku config:set AWS_REGION=us-west-2
或者您使用的任何区域。
此外,上次我检查过回形针与 AWS SDK 2 不兼容,因此如果您遇到奇怪的问题,可以尝试在 Gemfile 中使用此命令切换回 SDK 1:
gem 'aws-sdk', '< 2.0'