为不同应用程序的 .couchapprc 重用来自 ~/.couchapp.conf 的密码

Posted

技术标签:

【中文标题】为不同应用程序的 .couchapprc 重用来自 ~/.couchapp.conf 的密码【英文标题】:Reusing passwords from ~/.couchapp.conf for different applications' .couchapprc 【发布时间】:2011-08-17 03:39:56 【问题描述】:

http://couchapp.org/page/couchapp-config 的手册说您可以将密码存储在~/.couchapp.conf 中。但是,db url 实际上是特定数据库的 url。如果在不同的数据库中有两个应用程序,比如/db1/db2,那么我们必须有这个:


  "env" : 
    "default" : 
      "db" : "http://admin:pass@localhost:5984/db1"
    
  

和:


  "env" : 
    "default" : 
      "db" : "http://admin:pass@localhost:5984/db2"
    
  

但我不知道如何将其合并为一个(除非使用 hack 代替 default 为每个 DB 添加一个“环境”,例如 default-db1default-db2 等)。

我怎样才能把它合二为一,例如我在各自应用程序的.couchapprc 文件中指定db1db2 或类似的东西?

【问题讨论】:

【参考方案1】:

我现在无法对其进行测试,但我认为您应该简单地将两个环境合并为不同的名称(例如“env1”和“env2”):


  "env" : 
    "env1" : 
      "db" : "http://admin:pass@localhost:5984/db1"
    ,
    "env2" : 
      "db" : "http://admin:pass@localhost:5984/db2"
    
  

然后将环境作为最后一个命令行参数传递:couchapp push env1

但我认为最简单的解决方案是将信息放在项目根目录下的.couchapprc 中,然后将其添加到.gitignore.htignore 或您用于版本控制的任何内容中。

【讨论】:

问题是我想把它分开。我不想在全局文件中定义所有环境,我不想到处传播密码(例如,如果我更改通行证,我必须到处更改),并且在共享时,重要的是拥有其他人使用他们的设置而不是我的。【参考方案2】:

查看dist-packages/couchapp/config.py,方法Config.load在中间这样做:

new_conf = util.read_json(p, use_environment=True,
    raise_on_error=True)

注意use_environment=True。这不是一件完美的事情,因为它没有考虑全局 ~/.couchapp.conf 文件中的变量,但它至少提供了一种解决方法 - 只需定义必要的环境变量,比如 COUCHAPP_USERCOUCHAPP_PASS,并在 .couchapprc 文件中使用它们:

"db" : "http://$COUCHAPP_USER:$COUCHAPP_PASS@localhost:5984/db1"

现在你可以运行couchapp push:

$ export COUCHAPP_USER=testadmin 
$ export COUCHAPP_PASS=pass 
$ couchapp push

它会按预期工作。

【讨论】:

以上是关于为不同应用程序的 .couchapprc 重用来自 ~/.couchapp.conf 的密码的主要内容,如果未能解决你的问题,请参考以下文章

为不同的用户重用 HttpClient

在rails中重用相同的脚本

在 Android 上针对不同的屏幕尺寸和密度重用可绘制图像

如何移除 UITableView (MonoTouch) 中可重用的单元格

我如何知道何时可以安全地重用来自另一个进程的后台 NSURLSessionConfiguration id?

微服务应该可重用吗?