【问题标题】:Why is Puma unable to load Bundler when user who owns Puma process can?为什么拥有 Puma 进程的用户可以加载 Bundler?
【发布时间】:2018-02-04 00:50:22
【问题描述】:

由于我无法控制的原因,我需要在 CentOS 7 上运行 Rails 4 应用程序。目前,它在具有 rvm 和 Passenger 的 Red Hat 上成功运行。我想将它迁移到 rbenv 和 Puma,但我遇到了这个问题。

我正在尝试在 VirtualBox 虚拟机上运行测试安装。我相信我已经正确地将所有东西连接在一起。我已禁用 SELinux。当我运行cap deploy 时,puma 启动成功:

04:03 puma:start
      using conf file /var/www/rails-app/shared/puma.rb
      01 bundle exec puma -C /var/www/rails-app/shared/puma.rb --daemon
      01 * Pruning Bundler environment
      01 [6464] Puma starting in cluster mode...
      01 [6464] * Version 3.9.1 (ruby 2.1.10-p492), codename: Private Caller
      01 [6464] * Min threads: 4, max threads: 16
      01 [6464] * Environment: vm
      01 [6464] * Process workers: 1
      01 [6464] * Phased restart available
      01 [6464] * Listening on unix:///var/www/rails-app/shared/tmp/sockets/puma.sock
      01 [6464] * Daemonizing...
    ✔ 01 deploy@localhost 0.537s

但是 Puma 访问日志在无限循环中旋转出这个错误:

/home/deploy/.rbenv/versions/2.1.10/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- bundler/setup (LoadError)
... stack trace clipped ...

列出与我的 Puma 用户显示相关的进程:

$ ps aux | grep deploy
deploy   12645  0.0  0.2 115384  2084 pts/0    S    18:18   0:00 -bash
deploy   18517  0.7  1.7 271344 18076 ?        Sl   18:27   0:00 puma 3.9.1 (unix:///var/www/rails-app/shared/tmp/sockets/puma.sock)
deploy   23279  7.0  0.0      0     0 ?        Z    18:29   0:00 [ruby] <defunct>
deploy   23283  4.0  1.7 273400 17464 ?        Rl   18:29   0:00 puma: cluster worker 0: 18517

我已确认我可以以拥有 Rails 应用程序和 Puma 进程的deploy 用户身份成功运行 Bundler:

cd /var/www/rails-app/current && bundler --version
Bundler version 1.15.4

所以我不确定为什么会看到这个错误。经过数小时的研究和故障排除后,我陷入了困境。如果需要,我可以提供配置文件,但它们非常标准,我认为此时只会混淆这个问题。

这个问题对任何人来说都很熟悉吗?

【问题讨论】:

标签: ruby-on-rails centos rbenv puma


【解决方案1】:

解决此类问题的几个步骤:

  1. 确保正确安装了捆绑程序。在您的情况下看起来是肯定的,但从运行 gem install bundler 开始仍然是一件好事
  2. 确保您的所有路径都已正确配置。这是一个与您的情况相似的示例,其中安装了捆绑器但路径不正确并且捆绑器版本混合在一起:cannot load such file -- bundler/setup (LoadError)
  3. 如果您使用的是 RVM,您可能需要查看:LoadError: cannot load such file -- bundler/setup

【讨论】:

  • 谢谢你的建议,斯蒂芬。它并没有解决我的问题,但提供了几个新线程。它还把我带到了this question,看起来它可能是相关的。我在我的问题中添加了ps aux 输出。
  • 实际上,this comment here 原来是我的问题的解决方案。一旦我将/var/var/www 的所有者更改为我的deploy 用户,Puma 就能够成功运行。 @stephane-paquet,如果您希望将其添加到答案的顶部,我会选择您的答案作为正确答案,然后添加我自己的答案以及详细信息。再次感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-11
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多