1

我正在为我的 rails4 应用程序使用 PG。

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

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

鉴于我正在使用 PG gem 并且 Rails 已经从我的 database.yml 中知道我需要的用户,有没有一种方法可以自动执行此操作

4

3 回答 3

0

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

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

您的设计人员还应该在他们的本地计算机上拥有一个开发用户,并且由他们决定将他们的凭据放入config/database.yml.

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

于 2013-11-02T03:38:09.707 回答
0

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

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

当然,当在开发环境之外使用时,这将是一个主要的安全问题。但是,由于您提到了为从事该项目的人员提供更快设置的具体需求,因此在您的情况下,这似乎是一种可能的方法。

于 2013-11-02T04:12:57.720 回答
-1

@meagar 将密码和密钥置于版本控制之外是正确的,因此请务必牢记这一建议。

如今,使用环境变量存储登录信息已成为惯例,因为该数据本质上与您运行的环境相关联。因此,实际上,您可以检查database.yml版本控制,只要您调用环境变量,而不是实际的秘密。

例如,你可以在你的文件中放一些类似于username: <%= ENV[DB_USER_DEV] %>和的东西。然后,放入和。password: <%= ENV[DB_PASS_DEV] %>database.ymlDB_USER_DEV=my_psql_usernameDB_PASS_DEV=hashed_gibberish~/.profile

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

于 2015-07-08T04:55:28.373 回答