Postgres< => Rails。如何从database.yml自动创建用户

时间:2013-11-02 01:28:08

标签: ruby-on-rails ruby-on-rails-4 database-migration rails-postgresql pg

我在我的rails4应用程序中使用PG。

每次我将git克隆到新机器或清除我的项目时,我都必须继续为postgres创建用户,然后才能让应用程序再次运行。

当我与设计师等共享我的代码时,这是一个问题,他们必须不必要地详细了解设置db用户并使他们成为超级用户等。

有没有办法我可以自动执行此操作,因为我正在使用PG gem并且Rails已经从我的database.yml中了解了我需要的用户

3 个答案:

答案 0 :(得分:0)

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

您应该存储模板文件(我使用config/database.yml.example),每个克隆您应用的人都应该将模板文件复制到config/database.yml,然后将现有的添加到其中>数据库用户和密码,用于连接到Postgres的本地开发实例。

您的设计人员也应该在他们的本地计算机上拥有一个开发用户,他们可以将他们的凭据放入config/database.yml

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

答案 1 :(得分:0)

如果在安装PostgreSQL之后立即使用initdb选项运行--auth-local trust命令,它将绕过所有未来的数据库用户身份验证:

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

当然,在开发环境之外使用时,这将是一个重大的安全问题。但是既然你提到了为项目工作人员提供更快速设置的具体需求,那么在你的案例中似乎可能是一种可能的方法。

答案 2 :(得分:-1)

@meagar对于保持密码和密钥不受版本控制是正确的,因此请务必牢记这一建议。

现在传统上使用环境变量来存储登录信息,因为这些数据本质上与您正在运行的环境相关联。事实上,你可以将database.yml检入版本控制,只要你调用环境变量,而不是实际的秘密。

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

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