使用Docker在Ruby中发出SQL并使用PostgreSQL
这次要做的事情的详细内容
- 使用Docker-compose创建并连接一个Ruby和一个PostgreSQL容器。Ruby脚本将发出SQL并在控制台上显示获取的内容。
解释
-
- Docker-composeの使い方
- rubyでPostreSQLにアクセスする方法
不做解释
-
- Dockerのインストール方法
-
- Linuxの基本コマンド
-
- rubyの基本
- SQL
这次使用的文件
Ruby 的 Dockerfile
FROM ruby:3.2.2
WORKDIR /home/
COPY ./Gemfile /home/
# vendor/bundleに依存関係をインストールするよう設定する
RUN bundle config set --local path 'vendor/bundle' && \
bundle install && \
echo 'alias b="bundle exec"' >> ~/.bashrc
Gemfile文件
# frozen_string_literal: true
source "https://rubygems.org"
gem 'pg'
PostgreSQL的Dockerfile
FROM postgres:15.2
ENV POSTGRES_USER=root
ENV POSTGRES_PASSWORD=pass
ENV POSTGRES_DB=test
docker-compose.yml的翻译:
version: "3.8"
services:
ap:
build: ./src/ruby
image: ruby:1.0
container_name: ruby
stdin_open: true
tty: true
volumes:
- ./src/ruby/script:/home/ruby
networks:
- my_network
db:
build: ./src/postgres
image: postgres:1.0
container_name: postgres
volumes:
- ./src/postgres/data:/var/lib/postgresql/data
- ./src/postgres/sql:/home/postgres
networks:
- my_network
networks:
my_network:
测试_postgresql.rb
require 'pg'
conn = PG.connect(
host: 'postgres', # docker-composeで作成したPostgreSQLサービスのコンテナ名を指定します。
port: 5432, # PostgreSQLのデフォルトポート番号です
# Gemfileで指定したDBの名前とユーザー名とパスワードです
dbname: 'test',#
user: 'root',
password: 'pass'
)
# テーブルを作成します。
conn.exec("CREATE TABLE IF NOT EXISTS test1(
id SERIAL PRIMARY KEY,
name VARCHAR(100));"
)
#サンプルデータを1つ作成します。
conn.exec("INSERT INTO test1 VALUES (1, 'test_name') ON CONFLICT (id) DO NOTHING;")
#全てのデータを取得します。
result = conn.exec("SELECT * FROM test1;")
# 表示します。
result.each do |row|
puts "ID: #{row['id']}, Name: #{row['name']}"
end
conn.close
目录结构
操作步骤
-
- 切換至docker-compose.yml所在的文件夾
-
- 執行docker compose build
-
- 執行docker compose up -d
-
- 執行docker exec -it ruby /bin/bash
執行bundle exec ruby ruby/test_postgresql.rb
若成功取得測試數據,則完成。辛苦了。