我在我的rails4应用程序中使用PG。
每次我将git克隆到新机器或清除我的项目时,我都必须继续为postgres创建用户,然后才能让应用程序再次运行。
当我与设计师等共享我的代码时,这是一个问题,他们必须不必要地详细了解设置db用户并使他们成为超级用户等。
有没有办法我可以自动执行此操作,因为我正在使用PG gem并且Rails已经从我的database.yml中了解了我需要的用户
答案 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_username
和DB_PASS_DEV=hashed_gibberish
放入~/.profile
。
使用vagrant,我在为基本框配置Vagrantfile时创建用户和环境变量。我们所有的项目使用相同的基本框,并将这些ENV变量添加到database.yml
或多或少自动化dev中的所有内容!