【问题标题】:KeyError: key not found: "S3_BUCKET_NAME"KeyError:找不到密钥:“S3_BUCKET_NAME”
【发布时间】:2017-02-01 12:57:38
【问题描述】:

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

它在寻找什么,为什么它找不到 S3 名称只是为了编译资产。

在生产中.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

【问题讨论】:

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


    【解决方案1】:

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

    如果您想在本地运行您的应用(这包括运行 Rake 任务),您需要定义该环境变量。

    也就是说,这种说法毫无意义:

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

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

    【讨论】:

    • 这实际上是问题所在。当我推送到 heroku 时,它会取出 application.js。所以我试图在本地编译它,所以它被推送到heroku。我将使用日志错误更新错误。仅据您所知,在安装 S3 之前,我在本地编译得很好
    • @gwalshington 你误诊了你的问题。在本地编译资产并将它们推送到 Heroku 是错误的答案。 Heroku 不会删除您的 application.js,它会删除您的 application.js 的 旧版本
    • 其实application.js根本不在项目里。关于为什么它不存在的任何想法?为了确认它不存在,我只是要求它在页面加载时 console.log 一些东西,但它没有这样做。
    • 对于第一个响应——heroku 建议在本地编译以推送到 heroku devcenter.heroku.com/articles/rails-asset-pipeline
    • @gwalshington Heroku 使该选项可用,但它不建议您使用它。如果您已阅读链接到的文档,您会看到如何在 Heroku 端关闭资产编译,您似乎没有这样做,因为 Heroku 仍在尝试编译您的资产。无论如何,我已经回答了您的问题:定义环境变量 S3_BUCKET_NAME 以使您的 rake 任务成功。
    猜你喜欢
    • 2017-03-15
    • 2016-12-11
    • 1970-01-01
    • 2013-10-17
    • 2017-08-16
    • 2020-06-07
    • 2017-10-08
    • 2020-02-25
    • 2019-05-10
    相关资源
    最近更新 更多