1

我正在使用PG作为我的rails4应用程序。Postgres <=>导轨。如何从database.yml自动创建用户

每当我克隆到一台新机器或清除我的项目,我必须继续创建postgres的用户,然后再次使应用程序工作。

这是当我与设计师等分享我的代码中的问题,他们有不必要的进入设置了分贝用户,使他们的超级用户等

的细节有没有一种方法,我可以自动执行此,因为我正在使用PG gem,并且Rails已经从我的数据库中知道我需要的用户.yml

+0

为什么不写一个任何人都可以运行以生成postgres用户的简单shell脚本? –

回答

1

您不应该这样做。 database.yml不属于版本控制,请参阅How to manage Rails database.yml

你应该储存谁克隆了您的应用程序应当将模板文件复制到config/database.yml,并添加到它自己的现有数据库用户和密码,用于连接到本地发展的模板文件(我用config/database.yml.example)和每个人Postgres的实例。

您的设计师在其本地机器上也应该有一个开发用户,他们可以将他们的凭证放入config/database.yml

Rails没有办法为你创建数据库用户,因为它应该是告诉Rails 现有的数据库用户它应该使用的工作。您的开发环境中的所有应用都应该使用同一个用户。

+1

我不同意;我认为在版本控制中有* development *和* test *部分'database.yml'是很好的。没有理由让开发者毫无理由地跳过篮球。 – Dogweather

0

如果运行PostgreSQL安装右后--auth-local trust选项initdb命令,它会绕过所有未来的数据库用户身份验证:外部的开发环境中使用时

initdb /usr/local/var/postgres -E utf8 --auth-local trust 

当然,这将是一个重大的安全问题。但是,既然你提到了为项目工作的人员提供更快的设置的特殊需求,那么对于你的案例来说,这似乎是一种可能的方法。

0

@meagar关于保持密码和密钥不受版本控制是正确的,所以一定要记住这个建议。

现在传统的做法是使用环境变量来存储登录信息,因为这些数据固有地与您运行的环境绑定在一起。所以你可以,实际上,检查database.yml进入版本控制,只要你把环境变量的调用,而不是实际的秘密。

例如,您可以在您的database.yml文件中插入类似username: <%= ENV[DB_USER_DEV] %>password: <%= ENV[DB_PASS_DEV] %>的文件。然后,将DB_USER_DEV=my_psql_usernameDB_PASS_DEV=hashed_gibberish放入~/.profile

使用vagrant时,我在为基准箱配置Vagrantfile时创建了用户和环境变量。我们所有的项目都使用相同的基本框,并将这些ENV变量添加到database.yml或多或少的自动化开发中的所有内容!

相关问题