ruby-on-rails - 使用 postgres 和 redis Dockerize Rails 项目
问题描述
我是 RoR 的新手,我想使用在 3 个不同容器中运行的 Redis 和 Postgres 对 Rails 应用程序进行 dockerize。
我现在有一个在容器内运行的简单 rails 项目
我将如何配置 RoR 项目以执行以下操作:
如何将 Rails 与 Postgres 连接起来?
如何使用 Rails 将 Redis 设置为简单的内存数据存储并访问它?
谢谢 :)
码头工人-compose.yml
version: '3'
services:
rails:
build: .
volumes:
- ./:/app
ports:
- 3000:3000
postgres:
image: postgres
redis:
image: redis
编辑:
将 sqlite db 更改为 postgres
解决方案
您的问题有多个方面:
- docker - 使用和网络
- docker compose 用法
- rails - 数据库配置
- 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. 将redis
gem 添加到您的 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"
- 对于其他用途,您可能需要考虑redis-rails gem
- 有关
redis
gem 使用的更多信息,请参阅它的自述文件
推荐阅读
- android - 在 FlatList 中获取数据导航到另一个屏幕
- rust - cargo run:即使在 Cargo.toml 中列出也找不到 crate
- regex - sed中的正则表达式替换问号
- java - Kotlin 中的压缩文件夹
- r - 在 R 中标记组内的第一年
- python - 如何将 datetime.time() 值的字典调整为 datetime.time() 输入的返回
- machine-learning - 在另一个数据集上测试模型?
- android - 如何避免一个 webview 停止另一个视频?安卓工作室
- git - 如何创建到 GitHub 的拉取请求?
- angular - 有没有办法防止 Typescript 中的类型变窄