Ruby 在 Rails - AWS-SDK 配置文件
Ruby on Rails - AWS-SDK configuration file
我在我的 Rails 项目中使用 AWS-SDK gem,我想要一种初始化程序文件直接连接到我的存储库并直接在 Rails 控制台,像这样:
# At config/initializers/aws.rb
Aws::S3::Client.new(
:access_key_id => 'ACCESS_KEY_ID',
:secret_access_key => 'SECRET_ACCESS_KEY'
)
我已经查找过文档或教程,但我不太清楚。我该怎么做?谢谢!
我想你可以这样试试
把这个放在aws.rb
AWS.config(
:access_key_id => ENV['ACCESS_KEY_ID'],
:secret_access_key => ENV['SECRET_ACCESS_KEY']
)
并且当您在任何需要的地方初始化对象时,将调用配置
s3 = AWS::S3.new
试试这个配置:-
在config/intitalizers/s3.rb
Paperclip.interpolates(:s3_eu_url) { |attachment, style|
"#{attachment.s3_protocol}://s3-eu-west-1.amazonaws.com/#{attachment.bucket_name}/#{attachment.path(style).gsub(%r{^/}, "")}"
}
config/initializers/paperclip.rb
require 'paperclip/media_type_spoof_detector'
module Paperclip
class MediaTypeSpoofDetector
def spoofed?
false
end
end
end
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = '/:class/:id/:style/:filename'
S3_CREDENTIALS = Rails.root.join("config/s3.yml")
/config/s3.yml
development:
bucket: development_bucket
access_key_id: AKIA-----API KEYS---------MCLXQ
secret_access_key: qTNF1-------API KEYS--------DTy+rPubaaG
production:
bucket: production_bucket
access_key_id: AKI-----API KEYS--------LXQ
secret_access_key: qTNF1dW---API KEYS---+rPubaaG
希望你有 gem "aws-sdk"
在 Gemfile
在模型中添加您的资产
has_attached_file :avatar,
:styles => {:view => "187x260#"},
:storage => :s3,
:s3_permissions => :private,
:s3_credentials => S3_CREDENTIALS
使用 rails 控制台验证 public
Image.create(avatar: File.new("#{Rails.root}/public/images/colorful_blue.jpg"))
终于,我找到了解决方案:
- 在您的
/config/initializers
文件夹中创建文件 aws.rb
。
在aws.rb
中写:
S3Client = Aws::S3::Client.new(
access_key_id: 'ACCESS_KEY_ID',
secret_access_key: 'SECRET_ACCESS_KEY',
region: 'REGION'
)
就是这样。谢谢大家的回答!
要在 Rails 应用程序中的 AWS 服务客户端之间共享配置,请从配置初始化程序为 Ruby 配置 AWS SDK。
# config/initializers/aws-sdk.rb
Aws.config.update(
credentials: Aws::Credentials.new('access-key-id', 'secret-access-key'),
region: 'us-east-1',
)
现在您可以从任何服务构建客户端对象,无需任何选项:
s3 = Aws::S3::Client.new
ec2 = Aws::EC2::Client.new
请注意,您应该避免将凭据硬编码到您的应用程序中。如果您的源代码被访问并且难以轮换凭据,这可能会带来安全风险。
我建议通过 ENV['AWS_ACCESS_KEY_ID']
和 ENV['AWS_SECRET_ACCESS_KEY']
或 EC2 实例配置文件使用自动配置。
还有 aws-sdk-rails (1.0.0)
# config/initializers/aws.rb
Aws.config[:credentials] = Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'])
我在我的 Rails 项目中使用 AWS-SDK gem,我想要一种初始化程序文件直接连接到我的存储库并直接在 Rails 控制台,像这样:
# At config/initializers/aws.rb
Aws::S3::Client.new(
:access_key_id => 'ACCESS_KEY_ID',
:secret_access_key => 'SECRET_ACCESS_KEY'
)
我已经查找过文档或教程,但我不太清楚。我该怎么做?谢谢!
我想你可以这样试试
把这个放在aws.rb
AWS.config(
:access_key_id => ENV['ACCESS_KEY_ID'],
:secret_access_key => ENV['SECRET_ACCESS_KEY']
)
并且当您在任何需要的地方初始化对象时,将调用配置
s3 = AWS::S3.new
试试这个配置:-
在config/intitalizers/s3.rb
Paperclip.interpolates(:s3_eu_url) { |attachment, style|
"#{attachment.s3_protocol}://s3-eu-west-1.amazonaws.com/#{attachment.bucket_name}/#{attachment.path(style).gsub(%r{^/}, "")}"
}
config/initializers/paperclip.rb
require 'paperclip/media_type_spoof_detector'
module Paperclip
class MediaTypeSpoofDetector
def spoofed?
false
end
end
end
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = '/:class/:id/:style/:filename'
S3_CREDENTIALS = Rails.root.join("config/s3.yml")
/config/s3.yml
development:
bucket: development_bucket
access_key_id: AKIA-----API KEYS---------MCLXQ
secret_access_key: qTNF1-------API KEYS--------DTy+rPubaaG
production:
bucket: production_bucket
access_key_id: AKI-----API KEYS--------LXQ
secret_access_key: qTNF1dW---API KEYS---+rPubaaG
希望你有 gem "aws-sdk"
在 Gemfile
在模型中添加您的资产
has_attached_file :avatar,
:styles => {:view => "187x260#"},
:storage => :s3,
:s3_permissions => :private,
:s3_credentials => S3_CREDENTIALS
使用 rails 控制台验证 public
Image.create(avatar: File.new("#{Rails.root}/public/images/colorful_blue.jpg"))
终于,我找到了解决方案:
- 在您的
/config/initializers
文件夹中创建文件aws.rb
。 在
aws.rb
中写:S3Client = Aws::S3::Client.new( access_key_id: 'ACCESS_KEY_ID', secret_access_key: 'SECRET_ACCESS_KEY', region: 'REGION' )
就是这样。谢谢大家的回答!
要在 Rails 应用程序中的 AWS 服务客户端之间共享配置,请从配置初始化程序为 Ruby 配置 AWS SDK。
# config/initializers/aws-sdk.rb
Aws.config.update(
credentials: Aws::Credentials.new('access-key-id', 'secret-access-key'),
region: 'us-east-1',
)
现在您可以从任何服务构建客户端对象,无需任何选项:
s3 = Aws::S3::Client.new
ec2 = Aws::EC2::Client.new
请注意,您应该避免将凭据硬编码到您的应用程序中。如果您的源代码被访问并且难以轮换凭据,这可能会带来安全风险。
我建议通过 ENV['AWS_ACCESS_KEY_ID']
和 ENV['AWS_SECRET_ACCESS_KEY']
或 EC2 实例配置文件使用自动配置。
还有 aws-sdk-rails (1.0.0)
# config/initializers/aws.rb
Aws.config[:credentials] = Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'])