【问题标题】:Dockerize Rails project with postgres and redis使用 postgres 和 redis Dockerize Rails 项目
【发布时间】:2019-07-22 15:34:32
【问题描述】:

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

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

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

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

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

谢谢:)

docker-compose.yml

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

编辑:

将 sqlite db 更改为 postgres

【问题讨论】:

  • 你有没有尝试过?在开发中,如果您还没有尝试过 docker-compose(如果有,请发布您的 docker-compose.yml)。此外,由于 SQLite 不是实际的服务器,因此 Docker 堆栈的这个特定方面可能是卷挂载而不是容器。
  • 我不知道 Sqlite 不是真正的服务器。那么这里可以使用 postgres 而不是 sqlite 吗?
  • sqlite 是直接到文件的数据库,主要用作其他应用程序(非 Web)中的嵌入式数据库。我还将您的问题主题编辑为 postgres 而不是 sqlite,并在下面提供了一个希望对您有所帮助的答案。

标签: ruby-on-rails postgresql docker redis


【解决方案1】:

您的问题有多个方面:

  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

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

A.将 redis gem 添加到您的 Gemfile。

B.创建一个初始化器,例如在config/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"
  • 对于其他用途,您可能需要考虑redis-rails gem
  • 有关使用redis gem 的更多信息,请参阅其readme

【讨论】:

  • 感谢伙计,这就是我对 postgres 所需要的一切。但是如何连接redis和database.yml文件呢?
  • 添加了一些 redis 提示。如果您对此感到困惑,我建议您使用代码 sn-ps 提出一个单独的问题,说明您尝试过的问题以及遇到的问题。
猜你喜欢
  • 2018-06-26
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2018-01-14
  • 1970-01-01
  • 2020-08-18
  • 2020-05-10
相关资源
最近更新 更多