我正在使用PG作为我的rails4应用程序。Postgres <=>导轨。如何从database.yml自动创建用户
每当我克隆到一台新机器或清除我的项目,我必须继续创建postgres的用户,然后再次使应用程序工作。
这是当我与设计师等分享我的代码中的问题,他们有不必要的进入设置了分贝用户,使他们的超级用户等
的细节有没有一种方法,我可以自动执行此,因为我正在使用PG gem,并且Rails已经从我的数据库中知道我需要的用户.yml
我正在使用PG作为我的rails4应用程序。Postgres <=>导轨。如何从database.yml自动创建用户
每当我克隆到一台新机器或清除我的项目,我必须继续创建postgres的用户,然后再次使应用程序工作。
这是当我与设计师等分享我的代码中的问题,他们有不必要的进入设置了分贝用户,使他们的超级用户等
的细节有没有一种方法,我可以自动执行此,因为我正在使用PG gem,并且Rails已经从我的数据库中知道我需要的用户.yml
您不应该这样做。 database.yml
不属于版本控制,请参阅How to manage Rails database.yml。
你应该储存谁克隆了您的应用程序应当将模板文件复制到config/database.yml
,并添加到它自己的现有数据库用户和密码,用于连接到本地发展的模板文件(我用config/database.yml.example
)和每个人Postgres的实例。
您的设计师在其本地机器上也应该有一个开发用户,他们可以将他们的凭证放入config/database.yml
。
Rails没有办法为你创建数据库用户,因为它应该是告诉Rails 现有的数据库用户它应该使用的工作。您的开发环境中的所有应用都应该使用同一个用户。
我不同意;我认为在版本控制中有* development *和* test *部分'database.yml'是很好的。没有理由让开发者毫无理由地跳过篮球。 – Dogweather
如果运行PostgreSQL安装右后--auth-local trust
选项initdb
命令,它会绕过所有未来的数据库用户身份验证:外部的开发环境中使用时
initdb /usr/local/var/postgres -E utf8 --auth-local trust
当然,这将是一个重大的安全问题。但是,既然你提到了为项目工作的人员提供更快的设置的特殊需求,那么对于你的案例来说,这似乎是一种可能的方法。
@meagar关于保持密码和密钥不受版本控制是正确的,所以一定要记住这个建议。
现在传统的做法是使用环境变量来存储登录信息,因为这些数据固有地与您运行的环境绑定在一起。所以你可以,实际上,检查database.yml
进入版本控制,只要你把环境变量的调用,而不是实际的秘密。
例如,您可以在您的database.yml
文件中插入类似username: <%= ENV[DB_USER_DEV] %>
和password: <%= ENV[DB_PASS_DEV] %>
的文件。然后,将DB_USER_DEV=my_psql_username
和DB_PASS_DEV=hashed_gibberish
放入~/.profile
。
使用vagrant时,我在为基准箱配置Vagrantfile时创建了用户和环境变量。我们所有的项目都使用相同的基本框,并将这些ENV变量添加到database.yml
或多或少的自动化开发中的所有内容!
为什么不写一个任何人都可以运行以生成postgres用户的简单shell脚本? –