KeyError:找不到密钥:“S3_BUCKET_NAME”

时间:2016-09-23 15:34:18

标签: ruby-on-rails ruby heroku amazon-s3

我安装了S3,它在heroku上运行得很好。当我尝试运行RAILS_ENV=production bundle exec rake assets:precompile将资产推送到heroku时,它会返回上述错误。如果我运行heroku配置,它已经有S3存储桶和其他所有设置。

它在寻找什么,为什么不能仅仅为编译资产找到S3名称。

在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: 'us-west-2',
    }
 }

我在这方面找到了一些SO,但没有人指出我的解决方案。任何帮助表示赞赏!

更新: 我必须在本地编译的原因是因为heroku正在取出application.js文件。

remote:        Running: rake assets:precompile
remote:        I, [2016-09-23T15:12:53.753671 #267]  INFO -- : Writing /tmp/build_97a8fe2ca07bc4bf090be26f2be2872b/public/assets/application-9c608f99ae2b1980d74ba674b9f9ff7f0ae113d532e2c2ea580960a6a53346bb.js
remote:        Asset precompilation completed (6.54s)
remote:        Cleaning assets
remote:        Running: rake assets:clean
remote:        I, [2016-09-23T15:12:55.908630 #273]  INFO -- : Removed application-489c5647af1ca8b6a56e560e8a83d77a1a070778dabb4f0b40f55c4a4e5b8feb.js

1 个答案:

答案 0 :(得分:1)

您正尝试在本地编译资源,而Heroku上的S3_BUCKET_NAME配置属性无效。

如果要在本地运行应用程序(包括运行Rake任务),则需要定义该环境变量。

那就是说,这句话毫无意义:

  

当我尝试运行RAILS_ENV=production bundle exec rake assets:precompile将资源推送到heroku时,

您没有理由需要在本地运行rake assets:precompile以将资产“推送到Heroku”。每次推送新提交时,Heroku都会自动为您编译资产。