You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境下使用letter_opener_web发送邮件时出现xprop无法打开显示错误

解决Docker环境下letter_opener_web gem的xprop: unable to open display ''错误

问题描述

在Docker环境中运行使用letter_opener_web gem的应用,执行发送邮件脚本时,控制台反复输出以下错误:

xprop: unable to open display ''

xprop: unable to open display ''

xdg-open /.../tmp/letter_opener/1708508975_9987023_e9d40c9/rich.html

该错误不影响邮件发送功能,但会产生无用的控制台输出。

原因分析

letter_opener默认会调用系统的xdg-open工具自动打开生成的邮件预览HTML文件。但Docker容器默认没有图形化运行环境,DISPLAY环境变量为空,导致依赖图形化的xprop和xdg-open工具执行失败,抛出上述错误。

解决方案

方案1:禁用自动打开浏览器(推荐)

修改Rails开发环境配置文件(config/environments/development.rb),添加open_url: false参数,阻止letter_opener自动调用外部工具打开预览页:

config.action_mailer.delivery_method = :letter_opener
config.action_mailer.letter_opener_settings = {
  open_url: false
}

配置后,邮件会正常生成到临时目录,但不会触发xdg-open调用,控制台不再报错。

方案2:使用letter_opener_web网页端预览

letter_opener_web本身提供了网页界面用于查看邮件,无需依赖容器内的图形化工具:

  1. 确保在路由文件(config/routes.rb)中挂载了letter_opener_web的路由:
mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development?
  1. 启动容器后,在宿主机浏览器访问 http://<容器IP>:<应用端口>/letter_opener,即可查看所有生成的邮件预览。

方案3:容器内安装图形化依赖(不推荐)

如果非要让xdg-open在容器内工作,可以安装Xorg相关依赖包,但会增加容器体积且无必要,不建议使用:

# 以Debian/Ubuntu系镜像为例
apt-get update && apt-get install -y x11-utils xdg-utils

内容的提问来源于stack exchange,提问作者Jigar Bhatt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 14:42:07