使用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

目录结构

スクリーンショット 2023-05-22 18.13.24.png

操作步骤

    1. 切換至docker-compose.yml所在的文件夾

 

    1. 執行docker compose build

 

    1. 執行docker compose up -d

 

    1. 執行docker exec -it ruby /bin/bash

執行bundle exec ruby ruby/test_postgresql.rb
若成功取得測試數據,則完成。辛苦了。

广告
将在 10 秒后关闭
bannerAds