我使用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,并且字符串是双引号,但它似乎没有任何区别,所以...
想法?谢谢......
答案 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"
。你的空间基本上会导致系统误解它