【问题标题】:Env variables not loaded when invoked in rake task在 rake 任务中调用时未加载环境变量
【发布时间】:2015-06-17 14:08:26
【问题描述】:

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.

如何安全地使用凭据而不在我的可提交代码库中设置它们。

【问题讨论】:

  • 您使用的是 Foreman 还是 Figaro?
  • @CDub:工头。在 Yosemite 上使用 Homebrew 安装。
  • 所以看起来如果我运行foreman run rake sitemap:update 它工作正常...嗯...我想知道我是否必须在 Heroku 调度程序上使用foreman run 才能正常运行。跨度>
  • 是的,对于 Foreman,您需要使用 foreman run - 如果您使用 Figaro,application.yml 将成为您环境的一部分,因此单独运行 rake 即可。跨度>

标签: ruby-on-rails amazon-web-services rake env


【解决方案1】:

Foreman 在启动 Procfile 中定义的进程之前加载环境变量。

由于我们在 rake 任务中使用这些值 - 而不是实际的 Web 进程,因此您可以运行:

foreman run rake sitemap:update

这将使工头在运行 rake 任务之前加载值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-13
    • 2017-02-07
    • 1970-01-01
    • 2014-02-27
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    相关资源
    最近更新 更多