首页 > 解决方案 > 使用 postgres 和 redis Dockerize Rails 项目

问题描述

我是 RoR 的新手,我想使用在 3 个不同容器中运行的 Redis 和 Postgres 对 Rails 应用程序进行 dockerize。

我现在有一个在容器内运行的简单 rails 项目

我将如何配置 RoR 项目以执行以下操作:

  1. 如何将 Rails 与 Postgres 连接起来?

  2. 如何使用 Rails 将 Redis 设置为简单的内存数据存储并访问它?

谢谢 :)

码头工人-compose.yml

version: '3'
services: 
  rails: 
    build: .
    volumes:
      - ./:/app
    ports:
      - 3000:3000
  postgres:
    image: postgres
  redis:
    image: redis

编辑:

将 sqlite db 更改为 postgres

标签: ruby-on-railspostgresqldockerredis

解决方案


您的问题有多个方面:

  1. docker - 使用和网络
  2. docker compose 用法
  3. rails - 数据库配置
  4. redis在rails环境中的使用

如果您对所有这些都感到不满意,我建议您尝试消除一些噪音,首先确保您分别攻击每个主题,并提出更孤立于给定方面的问题 - 它会成功我们更容易提供帮助。

不过,要回答问题的 docker (-compose) 部分,您的配置中缺少一些元素。我希望这个例子能让你走上正确的轨道:

# docker-compose.yml
volumes: 
  pgdata:

services:
  db:
    image: postgres
    volumes:
      - pgdata:/pgdata
    environment:
      - POSTGRES_PASSWORD=mypass
      - POSTGRES_USER=rails
      - PGDATA=/pgdata

  redis:
    image: redis

  web:
    image: you/your_app
    build: .
    command: bin/rails server
    depends_on: [db, redis]
    ports: ["3000:3000"]
    volumes: 
      - $PWD:/app
    environment:
      DATABASE_URL: postgresql://rails:mypass@db/your_db_name
      REDIS_URL: redis://redis:6379

如果您查看您的 rails 文件夹,在该config/database.yml文件中,您应该会看到DATABASE_URL环境变量用于告诉 Rails 它的 Postgres 数据库在哪里。

一旦你能够让你的 Rails 应用程序在本地运行(没有 docker),它应该是直接切换到 docker-land。

雷迪斯

Redis 在 Rails 中有很多用途。假设您只是想使用 redis 作为键值存储,这很简单。

A. 将redisgem 添加到您的 Gemfile。

B. 创建一个初始化器,例如 inconfig/initializers/redis.rb并将其放入其中:

# This automatically reads the REDIS_URL from the environment
$redis ||= Redis.new

C. 在您的代码中的任何其他地方,您都可以像这样使用它:

$redis.ping
$redis.set "some-key", "some-value"
$redis.get "some-key"

推荐阅读