是RoR的新手,我想通过Redis和Postgres在3个不同的容器中运行来对Rails应用进行docker化。
我现在有一个在容器中运行的简单Rails项目
我将如何配置RoR项目以执行以下操作:
如何将Rails与Postgres连接?
如何使用Rails将Redis设置为简单的内存数据存储并访问它?
谢谢:)
docker-compose.yml
version: '3'
services:
rails:
build: .
volumes:
- ./:/app
ports:
- 3000:3000
postgres:
image: postgres
redis:
image: redis
编辑:
将sqlite数据库更改为Postgres
答案 0 :(得分:1)
您的问题涉及多个方面:
如果您还不满意所有这些,我建议您尝试消除一些干扰,首先确保您分别攻击每个主题,并提出与给定方面更孤立的问题-它将使我们更容易提供帮助。
尽管如此,要回答问题的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
宝石的更多信息,请参见其readme