如何在Ubuntu 20.04上使用PostgreSQL與您的Ruby on Rails應用程序

介紹

在使用Ruby on Rails網頁框架時,您的應用程序將默認使用SQLite作為數據庫。SQLite是一個輕量級、便攜且用戶友好的關係型數據庫,在低內存環境中表現尤其出色,因此在許多情況下都能很好地運行。但是,對於需要更可靠的數據完整性和程序擴展性的高度復雜的應用程序,使用PostgreSQL數據庫將是一個更健壯和靈活的選擇。您需要進行額外的步驟來配置您的Ruby on Rails設置以使用PostgreSQL。

在本教程中,您將設置一個連接到Ubuntu 20.04服務器上的PostgreSQL數據庫的Ruby on Rails開發環境。您將安裝並配置PostgreSQL,然後通過創建一個使用PostgreSQL作為其數據庫服務器的Rails應用程序來測試您的設置。

先決條件

本教程需要以下條件:

步驟 1 – 安裝 PostgreSQL

要將 PostgreSQL 配置為您的 Web 應用程序的數據庫,首先需要在伺服器上安裝數據庫。

使用 sudo 權限,更新您的 APT 套件索引以確保您的存儲庫是最新的:

  1. sudo apt update

接下來,安裝 PostgreSQL 及其開發庫:

  1. sudo apt install postgresql postgresql-contrib libpq-dev

在先前的命令中,postgresql 软件包包含主要的PostgreSQL程序,而postgresql-contrib则添加了几个扩展其功能的PostgreSQL特性。libpq-dev是一个PostgreSQL库,允许客户端发送查询并从后端服务器接收响应,这将允许您的应用程序与其数据库通信。

一旦安装了PostgreSQL及其依赖项,下一步是创建一个角色,您的Rails应用程序将在稍后使用该角色创建数据库。

步骤2 – 创建新的数据库角色

在PostgreSQL中,角色可用于组织权限和授权,就像用户在Linux中一样。在这一步中,您将为Linux用户名创建一个新的超级用户角色,该角色将允许您在PostgreSQL系统中创建和配置数据库。

要创建一个PostgreSQL超级用户角色,请运行以下命令,将突出显示的单词替换为您的Ubuntu 20.04用户名:

  1. sudo -u postgres createuser -s sammy -P

由于您指定了-P标志,您将被提示输入新角色的密码。输入所需的密码,并确保记录下来,以便在稍后的步骤中将其用于配置文件。

您可以使用createuser命令來創建一個名為sammy(或您首選的用戶名)的角色。使用-s標誌將賦予該用戶超級用戶權限,sudo -u允許您從在安裝PostgreSQL時自動創建的postgres帳戶運行命令。

注意:由於Ubuntu上的PostgreSQL的身份驗證模式初始為ident,因此默認情況下Ubuntu用戶只能使用相同名稱的角色在PostgreSQL中運行。有關更多信息,請查看PostgreSQL身份驗證的官方文檔

如果您沒有使用-P標誌,並且希望在創建後為該角色設置密碼,請使用以下命令進入PostgreSQL控制台:

  1. sudo -u postgres psql

您將收到以下輸出,以及PostgreSQL控制台的提示:

Output
psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1)) Type "help" for help. postgres=#

PostgreSQL控制台由postgres=#提示表示。在PostgreSQL提示符號下,輸入此命令以設置新數據庫角色的密碼,將突出顯示的名稱替換為您創建的名稱:

  1. \password sammy

PostgreSQL將提示您輸入密碼。在提示符號下輸入所需的密碼,然後確認。

現在,通過輸入以下命令退出PostgreSQL控制台:

  1. \q

您的常規提示符號現在將重新出現。

在此步驟中,您創建了一個具有超級用戶權限的新PostgreSQL角色。現在,您已準備好創建一個新的Rails應用程序,該應用程序使用此角色來創建數據庫。

第3步 – 创建一个新的Rails应用

通过为PostgreSQL配置角色,您现在可以创建一个新的Rails应用程序,并设置其使用PostgreSQL作为数据库。

首先,导航到您的主目录:

  1. cd ~

在此目录中创建一个新的Rails应用程序,用您想要命名应用程序的名称替换appname

  1. rails new appname -d=postgresql

选项-d=postgresql将PostgreSQL设置为数据库。

运行此命令后,您的主目录中将出现一个名为appname的新文件夹,其中包含基本Rails应用程序的所有元素。

接下来,进入应用程序的目录:

  1. cd appname

现在,您已经创建了一个新的Rails应用程序,并进入了项目的根目录,您可以在Rails应用程序内部配置并创建您的PostgreSQL数据库。

第4步 – 配置和创建您的数据库

當為應用程式建立開發測試數據庫時,Rails將使用您為Ubuntu用戶名創建的PostgreSQL角色。為確保Rails創建這些數據庫,您將修改您項目的數據庫配置文件。然後您將創建您的數據庫。

為您的Rails應用程序進行的配置更改之一是為上一步創建的PostgreSQL角色添加密碼。為了保護像密碼這樣的敏感信息,建議將密碼存儲在環境變量中,而不是直接寫入配置文件。

為了在登錄時將密碼存儲在環境變量中,運行以下命令,將APPNAME替換為應用程序的名稱,將PostgreSQL_Role_Password替換為您在上一步中創建的密碼:

  1. echo 'export APPNAME_DATABASE_PASSWORD="PostgreSQL_Role_Password"' >> ~/.bashrc

此命令將export命令寫入您的~/.bashrc文件,以便在登錄時設置環境變量。

要將變量導出為當前會話,請使用source命令:

  1. source ~/.bashrc

現在您已經將密碼存儲在您的環境中,您可以修改配置文件。

在您喜歡的文本編輯器中打開應用程序的數據庫配置文件。本教程將使用nano

  1. nano config/database.yml

default部分下,找到一行,其中包含pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>,並添加以下突出顯示的行,填寫您的憑據和您創建的環境變量。它應該看起來像這樣:

config/database.yml
...
default: &default
  adapter: postgresql
  encoding: unicode
  #有關連接池的詳細信息,請參閱Rails配置指南
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: sammy
password: <%= ENV['APPNAME_DATABASE_PASSWORD'] %>

development:
  <<: *default
  database: appname_development
...

此更新將使Rails應用程序使用正確的角色和密碼運行數據庫。按CTRL + xY,然後ENTER保存並退出。

有關在Rails中配置數據庫的更多信息,請參見Rails文檔

現在您已經對config/database.yml進行了更改,請使用rails命令創建應用程序的數據庫:

  1. rails db:create

一旦Rails創建了數據庫,您將收到以下輸出:

Output
Created database 'appname_development' Created database 'appname_test'

正如輸出所示,此命令在您的PostgreSQL服務器中創建了developmenttest數據庫。

現在您有一個與Rails應用程序連接的PostgreSQL數據庫。為確保您的應用程序正常工作,您現在將測試您的配置。

第5步-測試您的配置

為了測試您的應用程序能夠使用PostgreSQL數據庫,您將運行Web應用程序,以便它將在瀏覽器中顯示。

使用rails server命令,在Rails應用程序中運行內置的Web服務器,Puma

  1. rails server --binding=127.0.0.1

--binding將應用程式綁定到指定的 IP。預設情況下,此標誌將Rails綁定到0.0.0.0,這表示Rails將聽取所有接口,因此使用127.0.0.1指定localhost更安全。應用程式默認情況下在端口3000上聽取。

一旦您的Rails應用程序運行,您的命令提示符將消失,被此輸出取代:

Output
=> Booting Puma => Rails 7.0.4 application starting in development => Run `bin/rails server --help` for more startup options Puma starting in single mode... * Puma Version 5.6.5 (ruby 3.1.2-p20) ("Birdie's Version") * Min threads: 5 * Max threads: 5 * Environment: development * Listening on tcp://127.0.0.1:3000 Use Ctrl-C to stop

為了測試應用程序是否正在運行,請在您的服務器上打開一個新的終端窗口,使用curl命令發送請求到127.0.0.1:3000

  1. curl http://127.0.0.1:3000

您將收到大量以HTML結尾的輸出,類似於:

Output
... <strong>Rails version:</strong> 7.0.4<br /> <strong>Ruby version:</strong> 3.1.2 (x86_64-linux) </p> </section> </div> </body> </html>

如果您的Rails應用程序在遠程服務器上,並且您想通過Web瀏覽器訪問它,您可以將其綁定到服務器的公共IP地址。首先,在您的防火牆中打開端口3000

  1. sudo ufw allow 3000

接下來,查找您服務器的公共IP地址。您可以運行以下curl命令來執行此操作:

  1. curl http://icanhazip.com

這將返回您的公共IP地址。將其與rails server命令一起使用,用您服務器的公共IP替換server_public_IP

  1. rails server --binding=server_public_IP

現在,您將能夠通過服務器的公共IP地址在本地Web瀏覽器中訪問您的Rails應用程序,端口為3000,訪問:

http://server_public_IP:3000

在此URL上,您將找到一個Ruby on Rails頁面:

如果您可以訪問主頁,則表示您的應用程序已正確配置並連接到PostgreSQL數據庫。

在測試配置後,如果您想要關閉端口3000,請使用以下命令。

  1. sudo ufw delete allow 3000

結論

在這個教程中,您創建了一個Ruby on Rails Web應用程序,它配置為在Ubuntu 20.04服務器上使用PostgreSQL作為數據庫。如果您想了解更多關於Ruby編程語言的信息,請查看我們關於如何在Ruby中編碼的系列文章。

有關為應用程序選擇數據庫的更多信息,請查看我們關於SQLite、PostgreSQL和MySQL之間的區別和用例的教程。如果您想要了解更多有關如何使用數據庫的信息,請查看PostgreSQL查詢入門文章,或探索DigitalOcean的托管數據庫產品

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-postgresql-with-your-ruby-on-rails-application-on-ubuntu-20-04