Rails,无法让 Amazon AWS S3 在推送到 heroku 之前在本地预编译?
Rails, cannot get Amazon AWS S3 to precompile locally before push to heroku?
我遇到了 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=...
我正在使用载波处理我的图像,并且在我的初始化程序中正确设置了所有内容
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
我不确定我做错了什么?请帮忙。
我想我会 post 回答这个问题,以防将来有人需要它。在 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
等等等等
我遇到了 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=...
我正在使用载波处理我的图像,并且在我的初始化程序中正确设置了所有内容
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
我不确定我做错了什么?请帮忙。
我想我会 post 回答这个问题,以防将来有人需要它。在 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
等等等等