为什么Puma无法在拥有Puma进程的用户加载Bundler时加载Bundler?

时间:2017-08-25 23:03:53

标签: ruby-on-rails centos rbenv puma

由于我无法控制的原因,我需要在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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

解决此类问题的步骤很少:

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