Ruby on rails `获取';:找不到密钥:";S3“桶名”;(键错误)带回形针/aws s3/rails
我得到一个Ruby on rails `获取';:找不到密钥:";S3“桶名”;(键错误)带回形针/aws s3/rails,ruby-on-rails,ruby,heroku,amazon-s3,paperclip,Ruby On Rails,Ruby,Heroku,Amazon S3,Paperclip,我得到一个“fetch”:找不到键:“S3\u BUCKET\u NAME”(KeyError)rails(4.2.3)中的错误,使用“aws sdk”、“~>2.3”和“回形针”、“~>5.0.0” 我已经通过终端在我的环境中设置了这些键,运行heroku config会显示它们的列表 在我的config/environments/development.rb以及我的config production.rb中,我包括: config.paperclip_defaults = { stora
“fetch”:找不到键:“S3\u BUCKET\u NAME”(KeyError)
rails(4.2.3)中的错误,使用“aws sdk”、“~>2.3”和“回形针”、“~>5.0.0”
我已经通过终端在我的环境中设置了这些键,运行heroku config
会显示它们的列表
在我的config/environments/development.rb以及我的config production.rb中,我包括:
config.paperclip_defaults = {
storage: :s3,
s3_credentials: {
bucket: ENV.fetch('S3_BUCKET_NAME'),
access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
s3_region: ENV.fetch('AWS_REGION'),
}
}
我还在user.rb模型中包含了上述代码,但为了便于参考,模型中的代码如下所示:
has_attached_file :avatar,
styles: { medium: "300x300#", thumb: "100x100#" },
:convert_options => {
:thumb => "-quality 75 -strip" },
: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'],
:region => ENV['AWS_REGION']
},
:path => ":filename.:extension",
# :path => ":rails_root/public/system/:attachment/:id/:style/:filename",
:default_url => "default_img.png"
validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/
我还将环境变量包括在我的机密中。yml:
development:
secret_key_base: 817c07d41b8524495628fbe91fb1f0535ade65aa96a3fee379a8d16c29cc1f7b167f537442e547422ab17ee9700028a95896eb1c0717de06dfe7895d15ddb5ce
secret_key: sk_test_xxx
publishable_key: pk_test_xxx
access_key_id: xxx
secret_access_key: xxx
s3_bucket_name: 'bucket-name'
test:
secret_key_base: a38e71848a4d9bc63fa8dce4522add10a4931b10e6786f0cab6a9eb1643e271b992f52fa6eff672b0d03687003099c0632477dd26b246ac4e637c52c69ec4ab0
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
secret_key: <%= ENV["SECRET_KEY"] %>
publishable_key: <%= ENV["PUBLISHABLE_KEY"] %>
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
s3_bucket_name: <%= ENV["S3_BUCKET_NAME"]%>
开发:
秘密密钥库:817C07D41B8524495628FBE91FB1F053ADE65AA96A3FEE379A16C29CC1F7167F53742E547422AB17EE9700028A95896EB1C0717DE06DFE7895D15DDB5CE
密钥:sk_test_xxx
可发布密钥:pk\u test\u xxx
访问密钥id:xxx
秘密访问密钥:xxx
s3_bucket_name:“bucket name”
测试:
密钥库:A38E71848A4D9BC63FA8DCE4522AD10A4931B10E6786F0CAB6A9EB1643E271B992F52FA6EFF672B0D03687003099C0632477DD26B246AC4E637C52C69EC4AB0
#不要在存储库中保留生产机密,
#而是从环境中读取值。
制作:
机密密钥库:
密钥:
可发布密钥:
访问密钥id:
机密\u访问\u密钥:
s3_bucket_名称:
尽管这可能不是必需的。在谷歌上四处搜索,浏览与这个错误相关的其他几篇文章,我几乎没什么可说的了——有人知道这个问题可能是什么吗
“fetch”:找不到键:“S3\u BUCKET\u NAME”
表示环境变量S3\u BUCKET\u NAME没有值
在您的情况下,您正在使用Heroku。按照下面链接中的说明操作
对于Heroku:
如果您正在使用ENV['variables'],则需要在每个环境中设置它们。测试、生产和开发。如果您是在PC、MAC或Linux上开发,则需要确保设置了环境变量
对于linux:
对于OSX:
我做的和linux一样,我只是在我的~/.zshrc
中添加这样一行来设置它们。如果您没有使用zshell,请在~/.bashrc
或~/.bash\u配置文件中添加一行
export ENV_VARIABLE_NAME="value"
对于Windows:
我不知道怎么做,但我相信谷歌会 当运行heroku config时,我得到了S3\u BUCKET\u NAME:giving tree images
——这不意味着heroku已经将该值存储到变量中了吗?