只需运行`rails new`,奇迹般地与本地的PostgreSQL环境连接起来的故事
在当前环境下,只需要运行命令”bin/rails new . -d postgresql”就可以连接到本地的postgresql数据库。我没有修改过database.yml等任何文件。我知道-d postgresql会执行默认设置。但是为什么我可以连接而没有设置用户名和密码呢?是因为postgresql的用户名是默认的吗?
遇到了这个问题。
在database.yml中,
即使没有设置用户名和密码,
仍然可以正常执行db:create等操作。
在个人开发环境中,虽然可以通过Rails访问数据库,但并没有立即造成实际伤害,不过感觉不舒服,所以要进行调查。
总结起来,看起来有以下两种组合。
-
- Rails database.ymlデフォルト動作
- HomebrewからPostgreSQLをインストールした際のデフォルト設定
Rails的database.yml默认行为
据说如果在database.yml中没有设置username和password,Rails会执行以下操作。
# The specified database role being used to connect to postgres.
# To create additional roles in postgres see `$ createuser --help`.
# When left blank, postgres will use the default role. This is
# the same name as the operating system user that initialized the database.
username:
就直接来说吧,如果没有设置用户名的话,我认为就会使用安装操作系统时所执行的DB初始设置的用户名。
在多数情况下,可能会使用PC的用户名。嗯,明白了明白了。
在通过Homebrew安装PostgreSQL时的默认设置。
我知道即使不设置用户名也可以指定有效的PostgreSQL用户名。
我不理解为什么PostgreSQL忽略了在设置中应该有的密码!
在进行调查后,很快就找到了一个简单的理由。
如果使用Homebrew安装PostgreSQL,则默认情况下,pg_hba.conf中的初始设置允许无条件连接。
这是真的吗?
的确,变成了这样的感觉。
# CAUTION: Configuring the system for local "trust" authentication
# allows any local user to connect as any PostgreSQL user, including
# the database superuser. If you do not trust all your local users,
# use another authentication method.
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
评论很多,写得很详细呢。
总结
-
- コメント有能。ちゃんと読むべき。
- PostgreSQLの基本設定項目くらいは知っとかないとな。。。
如果你了解这些设置,特别是PostgreSQL,我觉得可以瞬间解决的。