2017-06-05 29 views
-3

database.yml文件有adapter: postgresql,這是如何引導rails服務器連接到postgres程序的?如果我在本地運行服務器,Rails會查看我的PATH或其他信息以查找我的postgres安裝位置?Rails如何通過database.yml找到正確的數據庫適配器?

+0

嗯,它不必知道它的安裝位置。它連接到一個名爲postgres的運行服務,該服務在本地主機端口5432上運行,除非您更改該服務。 – Iceman

回答

2

數據庫是客戶端 - 服務器軟件。因此,您的Rails應用程序通過主機名/ IP地址,端口號和數據庫證書(用戶名/密碼)連接到數據庫服務器,該證書可存在於網絡上的任何位置。

如果您正在本地主機上開發rails應用程序,並將數據庫二進制文件安裝在您正在開發的同一臺機器上。然後,爲了連接到該數據庫服務器,必須在本地主機上運行監聽端口的數據庫守護程序(對於postgresql,缺省端口爲5432)。您可以使用netstat -an | grep 5432

你可以改變你的應用程序的config/database.yml,如果您使用的是不同的一個(如果你沒有指定端口號,並使用PostgreSQL適配器,它假定默認端口號的端口號測試你的Postgres守護進程的狀態5432

development: 
    adapter: postgresql 
    encoding: utf8 
    database: app_dev 
    username: dev_user 
    password: dev_pass 
    host: localhost 
    port: 5432 
+0

謝謝@ sa77!好像在rails服務器和數據庫之間有一個客戶端 - 服務器關係,rails是客戶端ping數據庫服務器的東西。爲了使它們連接,它們通過端口5432.當用戶啓動postgres時,它默認使一個程序(守護進程)負責監聽端口5432,以供其他想要與之交互的程序使用。在這個意義上,守護進程就像一個API。在rails''database.yml'中,它將連接到端口5432上的任何數據庫,這就是它通過用戶計算機上的該端口並打開守護進程以訪問postgres的方式? – mangocaptain1

+0

是的..守護進程是你的postgres服務器運行在監聽端口'5432'的背景上,以獲取數據庫表上的任何API請求。你的'database.yml'文件中的數據庫名稱,端口號,數據庫用戶名和密碼配置定義了你的rails應用程序的ORM庫(ActiveRecord :: Base),該庫爲你的應用程序中的數據訪問哪個數據庫。你可以檢查細節關於你的Rails應用程序和postgres之間的db連接與你的'rails console'中的'ActiveRecrod :: Base.connection'。 – sa77

1

答案是在database.yml意見非常正確的:

# The TCP port the server listens on. Defaults to 5432. 
# If your server runs on a different port number, change accordingly. 
# port: 5432 

所以,如果你已經做了香草安裝,那麼軌道只是使用端口5432連接到你和你的數據庫進行通信。

+0

因此,rails使用端口5432來偵聽,默認情況下,postgres會自動設置爲連接偵聽端口5432的任何內容,這就是它們如何連接的方式? – mangocaptain1

相關問題