首页 > 解决方案 > Rails 视图渲染在 Docker 中很慢

问题描述

我正在 dockerizing 一个 Rails 应用程序,但我不确定为什么视图渲染这么慢。在任何两个页面之间导航需要将近 2 秒,有些页面需要更长的时间。当我在 Docker 之外运行应用程序时,此问题不存在。

我在具有 16GB 内存的 2015 MBP 上使用 Docker Desktop。

这是我的 Dockerfile:

FROM ruby:2.5.3

# replace shell with bash so we can source files
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

RUN apt-get update -qq && apt-get install -y build-essential checkinstall \
    libpq-dev libvips-dev libvips-tools

# python dependencies
RUN apt-get install -y libreadline-gplv2-dev libncursesw5-dev libssl-dev \
    libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

WORKDIR /tmp
RUN wget https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs921/ghostscript-9.21.tar.gz && \
    tar xzf ghostscript-9.21.tar.gz && cd ghostscript-9.21 && \
    ./configure && make && make install

RUN wget https://nodejs.org/download/release/v10.8.0/node-v10.8.0.tar.gz && \
    tar xzf node-v10.8.0.tar.gz && cd node-v10.8.0 && \
    ./configure && make -j4 && make install

WORKDIR /app

RUN gem install bundler -v 1.17.3
RUN gem install foreman -v 0.85.0

RUN npm install -g yarn

这是我的 docker-compose.yml:

version: "3"

services:
  web:
    build: 
      context: .
      dockerfile: Dockerfile
    command: bash -c "rm -f /app/tmp/pids/server.pid && foreman start -f Procfile.dev"
    volumes:
      - .:/app
      - npm_packages:/app/node_modules
      - bundler_gems:/usr/local/bundle/
    ports:
      - 3000:3000
      - 8888:8888
    depends_on:
      - postgres
      - redis
      - mailcatcher
    environment:
      PGHOST: postgres
      PGUSER: postgres
      PGPASSWORD: "password"
      RAILS_ENV: development
      RACK_ENV: development
      NODE_ENV: development

  mailcatcher:
    build:
      context: .
      dockerfile: Dockerfile
    command: bash -c "gem install mailcatcher && mailcatcher --ip 0.0.0.0 --foreground"
    volumes:
      - .:/app
      - npm_packages:/app/node_modules
      - bundler_gems:/usr/local/bundle/
    ports:
      - 1080:1080
      - 1025:1025

  redis:
    image: redis
    ports:
      - 6379
    volumes:
      - redis:/data

  postgres:
    image: postgres:9.6
    ports:
      - 54320:5432
    restart: always
    volumes:
      - postgres:/var/lib/postgresql/data

    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: "password"

volumes:
  postgres:
  redis:
  npm_packages:
  bundler_gems:

一切正常,只是速度很慢。

duration=1623.74 view=1622.89

标签: ruby-on-railsdockerdocker-compose

解决方案


这可能是在 Mac OS 上运行的 docker-compose 的一个已知问题。

尝试将该行添加127.0.0.1 localunixsocket.local到文件中/etc/hosts

发现于:https ://github.com/docker/compose/issues/3419#issuecomment-221793401


推荐阅读