Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails `获取';:找不到密钥:";S3“桶名”;(键错误)带回形针/aws s3/rails_Ruby On Rails_Ruby_Heroku_Amazon S3_Paperclip - Fatal编程技术网

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已经将该值存储到变量中了吗?