У меня есть все мои переменные окружения. Я проверил его с heroku config
, но все же я не могу сохранить изображение с помощью paperclip gem и aws s3 в среде разработки и получить ошибку ArgumentError: missing required :bucket option
. Я даже пытался изменить AWS_BUCKET
на S3_BUCKET_NAME
, но все равно безуспешно. Я прошел через каждый вопрос переполнения стека, который мог найти даже удаленно связанный с объектом, но все еще не может найти решение.ArgumentError: missing required: bucket option
Gems
gem 'paperclip'
gem 'aws-sdk-v1'
gem 'aws-sdk', '> 2'
Модель
has_attached_file :banner_image,
:storage => :s3,
:url =>':s3_domain_url',
:path => '/:class/:attachment/:id_partition/:style/:filename',
styles:
{
large: '600x600>',
medium: '300x300>',
thumb: '100x100>'
},
default_url: '/images/:style/missing.png',
:s3_credentials => Proc.new{|a| a.instance.s3_credentials }
def s3_credentials
{:bucket => Rails.application.secrets.aws_bucket, :access_key_id => Rails.application.secrets.aws_access_key_id, :secret_access_key => Rails.application.secrets.aws_secret_access_key}
end
validates_attachment_content_type :banner_image, content_type: /\Aimage\/.*\Z/
development.rb
config.paperclip_defaults = {
:storage => :s3,
:s3_protocol => 'https',
:s3_region => Rails.application.secrets.aws_region,
:s3_credentials => {
:bucket => Rails.application.secrets.aws_bucket,
:access_key_id => Rails.application.secrets.aws_access_key_id,
:secret_access_key => Rails.application.secrets.aws_secret_access_key
}
}
secrets.rb
development:
admin_name: <%= ENV["ADMIN_NAME"] %>
admin_email: <%= ENV["ADMIN_EMAIL"] %>
admin_password: <%= ENV["ADMIN_PASSWORD"] %>
email_provider_username: <%= ENV["SENDGRID_USERNAME"] %>
email_provider_password: <%= ENV["SENDGRID_PASSWORD"] %>
domain_name: <%= ENV["DOMAIN_NAME"] %>
aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %>
aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>
aws_bucket: <%= ENV["AWS_BUCKET"] %>
aws_region: <%= ENV["AWS_REGION"] %>
secret_key_base: hchwhc987h23y4bf93h4f928374h9f78h329487hf98723h4f789h234987hf89723h4f897h23498fh723487hf823974hf9872h34f7823489f
test:
domain_name: example.com
secret_key_base: hd78h2399d0a6315b087b3bebd35uhfhf8u3h4fh348fh92837h4f987h234f897h23487fh23897h4f98732h4f987h23498f7h324987fh239748f8237h4f987h3947hf
development_heroku:
admin_name: <%= ENV["ADMIN_NAME"] %>
admin_email: <%= ENV["ADMIN_EMAIL"] %>
admin_password: <%= ENV["ADMIN_PASSWORD"] %>
email_provider_username: <%= ENV["SENDGRID_USERNAME"] %>
email_provider_password: <%= ENV["SENDGRID_PASSWORD"] %>
domain_name: <%= ENV["DOMAIN_NAME"] %>
aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %>
aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>
aws_bucket: <%= ENV["AWS_BUCKET"] %>
aws_region: <%= ENV["AWS_REGION"] %>
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
staging:
admin_name: <%= ENV["ADMIN_NAME"] %>
admin_email: <%= ENV["ADMIN_EMAIL"] %>
admin_password: <%= ENV["ADMIN_PASSWORD"] %>
email_provider_username: <%= ENV["SENDGRID_USERNAME"] %>
email_provider_password: <%= ENV["SENDGRID_PASSWORD"] %>
domain_name: <%= ENV["DOMAIN_NAME"] %>
aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %>
aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>
aws_bucket: <%= ENV["AWS_BUCKET"] %>
aws_region: <%= ENV["AWS_REGION"] %>
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
admin_name: <%= ENV["ADMIN_NAME"] %>
admin_email: <%= ENV["ADMIN_EMAIL"] %>
admin_password: <%= ENV["ADMIN_PASSWORD"] %>
email_provider_username: <%= ENV["SENDGRID_USERNAME"] %>
email_provider_password: <%= ENV["SENDGRID_PASSWORD"] %>
domain_name: <%= ENV["DOMAIN_NAME"] %>
aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %>
aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>
aws_bucket: <%= ENV["AWS_BUCKET"] %>
aws_region: <%= ENV["AWS_REGION"] %>
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Добавление всех этих ключей ENV в secrets.yml похоже на много дублирования. Он также вводит источник ошибок и косвенности, так как вы не должны проверять secrets.yml в git. Я бы просто использовал 'ENV.fetch (« SOME_KEY »)' непосредственно из ваших инициализаторов. – max