【问题标题】:Rails, cannot get Amazon AWS S3 to precompile locally before push to heroku?Rails,在推送到 Heroku 之前无法让 Amazon AWS S3 在本地预编译?
【发布时间】:2018-03-25 10:58:30
【问题描述】:

我遇到了 heroku 的问题,我的样式表在部署时不起作用,它说尝试在本地预编译,然后将其提交给 git,然后推送。我做bundle exec rails assets:precompile RAILS_ENV=production。 在尝试执行此操作时出现错误;

完整跟踪

C:\Sites\Peoples_Profiles>bundle exec rails assets:precompile RAILS_ENV=production --trace
** Invoke assets:precompile (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke environment (first_time)
** Execute environment
rails aborted!
KeyError: key not found: "S3_ACCESS_KEY"
C:/Sites/Peoples_Profiles/config/initializers/carrier_wave.rb:6:in `fetch'
C:/Sites/Peoples_Profiles/config/initializers/carrier_wave.rb:6:in `block in <top (required)>'
C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/carrierwave-0.11.2/lib/carrierwave/uploader/configuration.rb:118:in `configure'
C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/carrierwave-0.11.2/lib/carrierwave.rb:14:in `configure'
C:/Sites/Peoples_Profiles/config/initializers/carrier_wave.rb:2:in `<top (required)>'
...

here 在亚马逊网站上,它说明了如何在本地设置 ENV 变量,以便您可以在本地预编译我所做的所有内容,并在我的 rails ENV 中列出它们

AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=... 

我正在使用carrierwave 进行图像处理,并在我的初始化程序中正确设置了所有内容

carrier_wave.rb

if Rails.env.production?
  CarrierWave.configure do |config|
    config.aws_credentials = {
     # Configuration for Amazon S3

    access_key_id:     ENV.fetch('S3_ACCESS_KEY'),
    secret_access_key: ENV.fetch('S3_SECRET_KEY'),
    region:            ENV.fetch('S3_REGION') # Required
}
    config.storage    = :aws
    config.aws_bucket = ENV.fetch('S3_BUCKET')  
  end
end

我不确定我做错了什么?请帮忙。

【问题讨论】:

  • 您能否确认您已在 Heroku 上将 S3_ACCESS_KEY 设置为环境变量?
  • 嗨。是的,一切都正确设置在heroku,我只是在本地编译时发现了我的问题,例如亚马逊说set AWS_ACCESS_KEY_ID=your_access_key_id,所以我需要AWS_ACCESS_KEY_ID而不是carrier_wave.rb中的S3_ACCESS_KEY,其余部分也是如此,但设置桶我还在弄清楚:D
  • 好的,现在一切都好。设置桶只是AWS_BUCKET

标签: ruby-on-rails amazon-web-services heroku amazon-s3 carrierwave


【解决方案1】:

我想我会在这个问题上发布一个答案,以防将来有人需要它。用于 cmd 行中的 windows,

set AWS_ACCESS_KEY_ID=your_access_key_id_here
set AWS_SECRET_ACCESS_KEY=...
set AWS_REGION=...
set AWS_BUCKET=...

将在本地设置您的 ENV 变量,以便您进行编译。在您的carrier_wave.rb 中设置这些,例如S3_ACCESS_KEY 变为AWS_ACCESS_KEY_ID 等。编译所有内容以进行生产。然后将您的carrier_wave.rb中的所有内容改回S3_ACCESS_KEY等。然后使用git添加所有内容并部署。

编辑只需简单地使用set S3_ACCESS_KEY=djkhaskdhfaskdjhf等等等等

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    相关资源
    最近更新 更多