在Heroku部署期间克隆一个存储库



我有一个haroku上托管的Rails Project ProjectX 。对于存储生产配置和文件,我正在使用不同的存储库 ProjectX-Config 。有可能:

  1. clone projectx-config,
  2. 删除当前的配置文件,
  3. Symlink配置文件到ProjectX-Config文件

请注意,这必须在Heroku上完成。我也知道,Heroku可以选择使用环境变量维护配置,但这不是我想要的。

谢谢!

不可能。

每个Dyno拥有自己的短暂文件系统,并带有新的副本 最近部署的代码。在Dyno的一生中运行 流程可以将文件系统用作临时刮擦板,但没有 编写的文件在任何其他Dyno中都可以看到,并且 在快速停止的那一刻或 重新启动。例如,这种情况发生在任何时候由于 申请部署,每天大约是正常的一部分 Dyno Management。
-https://devcenter.heroku.com/articles/dynos#ephemeral-filesystem

或至少没有像设置这样的Rube Goldberg机器,您可以在其中设置某种自动化(例如邮政挂钩)以合并repo a和repo b并将结果推向Heroku。

我也相信,应用程序配置不应存在于环境变量中,因为它乏味而不是维护文件。

Heroku在这里不同意。

处理此类配置var的传统方法是将其放置 在源 - 在某种属性文件中。这是一 容易出错的过程,对于开源而言尤其复杂 通常必须使用单独(和私人)分支的应用 应用特定配置。
更好的解决方案是使用环境 变量,并将密钥排除在代码之外。在传统主机上或 在本地工作,您可以在BASHRC文件中设置环境VAR。在 Heroku,您使用config vars。 -https://devcenter.heroku.com/articles/config-vars

,尽管您可能高估了实际存储在env vars中的东西。您只需要存储诸如API键之类的秘密

其他非秘密配置,例如各种宝石的设置可以并且应该在config/initializers中设置。

如果您仍然认为使用GUI是可怕的,请使用您分析并使用的YAML文件来设置env vars:

require 'yaml'
yaml = YAML.load_file(File.join(__dir__, 'conf.yml'))
def create_key(*components)
  components.join('_').upcase
end
env_vars = yaml["production"].each_with_object({}) do |(key,value), memo|
  key_components = [key]
  if value.kind_of? Hash
    value.each_pair do |k,v|
      memo[create_key(*key_components.dup.push(k))] = v
    end
  else
    memo[create_key(*key_components)] = value
  end
end.each do |k,v|
  system("heroku config:set #{k}=#{v}")
  puts "Setting #{k} = #{v}; #{ $? }"
end

,或者您甚至可以将序列化表格(JSON或YAML)存储在单个env var中 - 虽然总尺寸限制为32kb。

相关内容

  • 没有找到相关文章

最新更新