带有postgres和redis的Dockerize Rails项目

时间:2019-02-28 16:42:51

标签: ruby-on-rails postgresql docker redis

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

我现在有一个在容器中运行的简单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数据库更改为Postgres

1 个答案:

答案 0 :(得分:1)

您的问题涉及多个方面:

  1. docker-使用和联网
  2. docker撰写用法
  3. rails-数据库配置
  4. 在铁路环境中重新使用

如果您还不满意所有这些,我建议您尝试消除一些干扰,首先确保您分别攻击每个主题,并提出与给定方面更孤立的问题-它将使我们更容易提供帮助。

尽管如此,要回答问题的docker(-compose)部分,您在配置中缺少一些元素。我希望这个例子能使您走上正轨:

# docker-compose.yml
version: '3'

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宝石添加到您的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宝石的更多信息,请参见其readme