【问题标题】:How can I set the Devise secret key inside a rake task如何在 rake 任务中设置设计密钥
【发布时间】:2014-04-26 10:14:13
【问题描述】:

我想运行一个 rake 任务,但它抱怨没有设计密钥。我希望使用 task :mytask => :environment 定义任务会为我加载,但我需要在调用 rake 任务时指定它。

我将我的密钥保存在.env-production 中,通常获取文件然后导出DEVISE_SECRET_KEY。但我不想为了运行 rake 任务而输入 source .env-production && export DEVISE_SECRET_KEY && RAILS_ENV=production rake mytask

我尝试像这样增强:environment 任务:

# lib/tasks/environment.rake
Rake::Task["environment"].enhance do
  if Rails.env.production?
    fn = ".env-production"
  else
    fn = ".env"
  end

  puts "Trying to read devise secret key from #{fn}"

  match = File.read(fn).match /DEVISE_SECRET_KEY="(.*)"/

  if match
    Devise.secret_key = match[1]
    ENV['DEVISE_SECRET_KEY'] = match[1]
    puts "Found devise secret key"
  else
    puts "Couldn't find secret key"
  end
end

但它仍然抱怨不知道密钥...有什么办法可以做到这一点?

【问题讨论】:

  • 嗯,问题是增强似乎是在环境任务结束时添加的,在已经引发错误之后,这就是为什么它没有打印我的任何puts'。

标签: ruby-on-rails devise rake environment-variables


【解决方案1】:

伙计,答案很简单。

我刚改成这样:

task :load_devise_key do
  if Rails.env.production?
    fn = ".env-production"
  else
    fn = ".env"
  end

  puts "Trying to read devise secret key from #{fn}"

  match = File.read(fn).match /DEVISE_SECRET_KEY='(.*)'/

  puts File.read(fn)
  if match
    Devise.secret_key = match[1]
    ENV['DEVISE_SECRET_KEY'] = match[1]
    puts "Found devise secret key"
  else
    puts "Couldn't find secret key"
  end
end

task :environment => :load_devise_key

似乎成功了!

【讨论】:

    猜你喜欢
    • 2013-08-07
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 2022-09-22
    • 2014-09-10
    • 1970-01-01
    • 2020-02-16
    相关资源
    最近更新 更多