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

使用systemd服务运行Ruby项目时无法找到Gemfile的问题求助

解决Bitwarden-Ruby作为systemd服务运行的常见问题

我帮你梳理下把Bitwarden-Ruby用systemd服务稳定运行的关键要点,毕竟用bundle部署Ruby项目到systemd时,很容易踩环境、路径、权限这些坑。结合你已经完成的Ruby、Bundler安装和bundle install --deployment操作,下面是针对你的配置的优化和问题排查步骤:

1. 必须指定正确的工作目录

systemd默认的工作目录是根目录/,而bundle在部署模式下(--deployment)会把gem存在项目目录的vendor/bundle里,所以必须让systemd切换到项目目录再执行命令。在你的service配置里加上:

WorkingDirectory=/var/lib/bitwarden/bitwarden-ruby

2. 明确声明环境变量,避免systemd环境缺失

终端里的环境变量和systemd的默认环境差异很大,哪怕你在ExecStart里写了RACK_ENV,也可能漏掉Ruby、bundle的路径或者其他必要变量。推荐用Environment指令单独声明:

Environment="RACK_ENV=production"
Environment="ALLOW_SIGNUPS=1"
Environment="PATH=/usr/local/bin:/usr/bin:/bin"

这样能确保systemd能找到bundle命令和Ruby解释器。

3. 简化并修正ExecStart命令

把环境变量和执行命令分开后,ExecStart可以简化(因为已经指定了工作目录,config.ru不需要写绝对路径):

ExecStart=/usr/local/bin/bundle exec rackup -p 4567 config.ru

这样既清晰,又能避免路径拼接错误。

4. 用普通用户运行服务,避免权限问题

systemd默认用root运行,但Ruby项目用root运行有安全风险,也容易出现文件权限冲突。建议创建一个专门的运行用户:

sudo useradd -r -s /bin/false bitwarden
sudo chown -R bitwarden:bitwarden /var/lib/bitwarden/bitwarden-ruby

然后在service配置里加上:

User=bitwarden
Group=bitwarden

5. 调试与日志排查

如果服务还是启动失败,用以下命令定位问题:

  • 查看服务实时状态:sudo systemctl status bitwarden-ruby.service
  • 查看完整运行日志:sudo journalctl -u bitwarden-ruby.service -f
    日志会明确告诉你是找不到bundle、gem依赖缺失,还是权限不足,根据提示调整即可。

完整的systemd服务配置示例

[Unit]
Description=Bitwarden-Ruby Password Manager Service
After=network.target

[Service]
Type=simple
User=bitwarden
Group=bitwarden
WorkingDirectory=/var/lib/bitwarden/bitwarden-ruby
Environment="RACK_ENV=production"
Environment="ALLOW_SIGNUPS=1"
Environment="PATH=/usr/local/bin:/usr/bin:/bin"
ExecStart=/usr/local/bin/bundle exec rackup -p 4567 config.ru
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:32:21