启动Puma时提示找不到tzinfo gem的问题求助
解决Puma启动找不到tzinfo gem的问题
核心原因
rails s默认会通过bundle加载项目依赖的gem,但你的puma-init.sh脚本可能直接调用了系统全局的puma,没有使用bundle管理项目的gem环境,导致找不到bundle安装的tzinfo。
具体解决步骤
修改puma-init.sh的启动命令:
找到脚本里启动puma的行,把直接调用puma的命令改成bundle exec puma,示例:# 原命令可能是 puma -C config/puma.rb -d # 修改为 bundle exec puma -C config/puma.rb -d这样会强制使用bundle为当前项目安装的gem集合,而非系统全局gem。
确保脚本加载正确的Ruby环境:
如果服务器用了rbenv、rvm这类Ruby版本管理工具,在脚本开头添加环境加载命令:# 针对rbenv eval "$(rbenv init -)" # 针对rvm source ~/.rvm/scripts/rvm避免脚本使用系统默认Ruby版本,导致gem路径不匹配。
明确指定RAILS_ENV环境变量:
在脚本开头添加环境变量声明,确保bundle加载对应环境的gem:export RAILS_ENV=production # 根据你的部署环境调整,比如staging先手动验证命令:
在项目根目录执行bundle exec puma -C config/puma.rb start,如果能正常启动,说明上述修改可以解决问题。
额外排查点
如果还是不行,检查bundle show tzinfo的输出路径,确认puma启动时的gem路径是否包含这个目录,或者在puma.rb里添加:
ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', __dir__) require 'bundler/setup'
强制加载项目的Gemfile依赖。
内容的提问来源于stack exchange,提问作者Ari
相关产品推荐
相关产品推荐

