Paperclip / Rails没有使用AWS信息读取ENV变量

时间:2014-12-20 19:52:11

标签: ruby-on-rails amazon-web-services amazon-s3 environment-variables paperclip

我正在尝试使用带有S3 AWS的paperclip。我已经在.bash_profile中设置了密钥和存储桶名称,但Rials / Paperclip似乎无法读取它们,因为当我尝试在开发中上传图像时出现以下错误...

'缺少必需品:桶选项'

如果我用实际名称替换ENV [' S3_BUCKET_NAME'],那么我会得到以下内容......

'缺少证书。无法找到AWS凭据'

以下是模型中的设置......

has_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" },
:storage => :s3,
:s3_credentials => {
  :bucket => ENV['S3_BUCKET_NAME'],
  :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
  :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
        },
:s3_host_name => 's3-eu-west-1.amazonaws.com'

我已尝试将凭据放在Rails的开发配置文件中,但我有相同的错误。我是否需要告诉rails在哪里查找ENV变量,或者我在这里做错了什么?似乎其他人有类似的问题,但我找不到解决方案。

感谢阅读。

1 个答案:

答案 0 :(得分:0)

只需将AWS桶,密钥和key_id存储在YAML文件中,然后在' config / initializers'中创建新文件以读取YAML文件内容并设置相应的ENV变量。别忘了重新启动rails服务器

实施例

google_client =  YAML.load_file("#{Rails.root.join('config/google_client.yml')}")
ENV['GOOGLE_APP_NAME'] = google_client['APP_NAME']
ENV['GOOGLE_CLIENT_ID'] = google_client['CLIENT_ID']
ENV['GOOGLE_CLIENT_SECRET'] = google_client['CLIENT_SECRET']
ENV['GOOGLE_CLIENT_SCOPE'] = google_client['CLIENT_SCOPE']

通常,我们不会在Github提交中推送aws信息,而只是将ssh推送到远程服务器并将YAML文件放在我们的Rails应用程序的config文件夹中。因此,只有有权访问您服务器的人才能读取您的aws凭据而不是所有人,即使他们拥有Github访问权限。

告诉我这是否解决了你的问题。