Rails在推送到heroku之前无法获取Amazon AWS S3本地预编译?

问题描述:

我有一个与heroku和我的样式表不能在部署上工作的问题,它说要尝试和本地预编译,然后将其提交给git然后推送。我做bundle exec rails assets:precompile RAILS_ENV=production。 在试图做到这一点,我得到错误;Rails在推送到heroku之前无法获取Amazon AWS S3本地预编译?

完整曲线

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本地瓦尔所以你可以预编译的一切在本地,我已经做了,在我的轨道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 

林不知道我在做什么错?请帮忙。

+1

你确定你已经在Heroku上设置了S3_ACCESS_KEY作为environmet变量吗? – Maxence

+0

嗨。是的,一切都设置在heroku正确,我刚刚发现我的问题,当本地编译亚马逊说,例如'设置AWS_ACCESS_KEY_ID = your_access_key_id',这样而不是'S3_ACCESS_KEY'在carrier_wave.rb我需要'AWS_ACCESS_KEY_ID'而不是,其余的同样适用于其余但设置斗我仍然搞清楚:D –

+0

好吧,现在好了。设置桶只是'AWS_BUCKET'。 –

我以为我会发布一个答案在这个incase任何一个未来需要它。使用在CMD窗口线,

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添加所有内容并进行部署。