在lib/tasks/sitemap.rake
:
namespace :sitemap do
task update: :environment do
Rake::Task["sitemap:generate"].execute
key = ENV['AWS_ACCESS_KEY_ID']
secret = ENV['AWS_SECRET_ACCESS_KEY']
bucket = ENV['S3_BUCKET']
s3 = AWS::S3.new(access_key_id: key, secret_access_key: secret)
s3.buckets[bucket].objects['sitemap.xml'].write(data: File.open(Rails.root.join('tmp','sitemaps','sitemap.xml')), acl: :public_read)
end
end
在此代码中,如果我手动键入字符串,则进程运行正常。但是一旦我使用ENV
,我就会收到以下错误:
rake aborted!
AWS::Errors::MissingCredentialsError:
Missing Credentials.
如何在不在我的可提交代码库中设置凭据的情况下安全地使用凭据。
答案 0 :(得分:2)
Foreman在启动Procfile中定义的进程之前加载环境变量。
由于我们在rake任务中使用这些值 - 而不是实际的Web进程,因此您可以运行:
foreman run rake sitemap:update
这将使工头在运行rake任务之前加载值。