没有为Heroku设置Figaro环境变量

时间:2014-03-02 04:23:08

标签: ruby-on-rails ruby heroku rake

我使用Rails Composer生成了一个骨架应用程序,并包含了Figaro。它在本地成功运行。在我修改它之前,我将它推向Heroku。但是,heroku运行rake db:seed失败了。我发现app / config / application.yml是.gitignored。因此,在运行heroku run rake db:seed之前,我需要使用rake figaro:heroku来设置环境变量。但是,耙子费加罗:heroku失败如下:

D:\BitNami\rubystack-2.0.0-11\projects\myapp>rake figaro:heroku
 !    Usage: heroku config:set KEY1=VALUE1 [KEY2=VALUE2 ...]
 !    Must specify KEY and VALUE to set.

这看起来只是忽略了我的app / config / application.yml并向我询问行向输入,但我不知道。同样,应用程序在本地成功运行,因此application.yml应该是正确的。这是:

MANDRILL_USERNAME: valid.address@gmail.com
MANDRILL_APIKEY: a.valid.apikey
ADMIN_NAME: Admin Name
ADMIN_EMAIL: valid.address@gmail.com
ADMIN_PASSWORD: validpassword
ROLES: [admin, user, VIP]

当我发出heroku run rake db:seed时,种子发生故障。该文件是:

puts 'ROLES'
YAML.load(ENV['ROLES']).each do |role|
  Role.find_or_create_by_name(role)
  puts 'role: ' << role
end
puts 'DEFAULT USERS'
user = User.find_or_create_by_email :name => ENV['ADMIN_NAME'].dup, :email => ENV['ADMIN_EMAIL'].dup, :password => ENV['ADMIN_PASSWORD'].dup, :password_confirmation => ENV['ADMIN_PASSWORD'].dup
puts 'user: ' << user.name
user.confirm!
user.add_role :admin

首次访问变量角色失败,因为ENV ['ROLES']未初始化。它将由application.yml初始化,并且是本地的,但它是.gitignored。因此,需要耙费加罗:heroku才能成功。

这看起来很简单,特别是因为它在本地运行顺畅。 OBTW,我已经尝试过如图所示的application.yml,并且字符串是双引号,但它似乎没有任何区别,所以...

想法?谢谢......

2 个答案:

答案 0 :(得分:1)

我从你提到的路径中了解到这是一个Windows问题。问题是在Windows上没有正确处理数组。我曾经做过的解决方法是在lib / tasks中的rake文件中覆盖Heroku的“vars”方法,比如

module Figaro
  module Tasks
    class Heroku # < Struct.new(:app)
      def vars
        Figaro.env(environment).map { |key, value|
          if value.start_with? "["   
            value = "'#{value.gsub('"', '')}'"
          elsif value.include? " " 
            value = "'#{value}'" 
          end
          "#{key}=#{value}"
        }.sort.join(" ")
    end
    end
  end
end

答案 1 :(得分:0)

我猜测这个问题可能与费加罗处理你的不同变量类型有关:

MANDRILL_USERNAME: "valid.address@gmail.com"
MANDRILL_APIKEY: "a.valid.apikey"

ADMIN_NAME: "Admin Name"
ADMIN_EMAIL: "valid.address@gmail.com"
ADMIN_PASSWORD: "validpassword"

ROLES: ["admin", "user", "VIP"]

尝试删除任何空格&amp;确保您只向费加罗发送KEY: "VALUE"。你的空间基本上会导致系统误解它