为什么Ruby明显找不到Capistrano当前目录?

问题描述 投票:0回答:1

多个 RoR Web 应用程序已在服务器上运行多年,并定期使用最新版本的 ruby、rails 和 mod_passenger 进行更新。现在,突然一个特定的应用程序(其他应用程序都没有,即使它们使用相同的设置)出现了下面描述的问题。

我目前使用的是 Alma Linux 8.10,使用 Apache 2.4.37、mod_passenger 6.0.23、通过 rbenv 的 ruby 3.3.3 和 Rails 7.2.1。通过 capistrano 3.19.1 和 capistrano-passenger 0.2.1 进行部署。

这是

/var/log/httpd/error_log
中的(缩写)错误消息,当我在部署后首次尝试在浏览器中访问该应用程序时,会发生此消息:

/home/user/.rbenv/versions/3.3.3/bin/ruby: No such file or directory -- Passenger AppPreloader: /var/www/me.mio/current (LoadError)
[...age/Cor/App/Implementation.cpp:221 ]: Could not spawn process for application /var/www/me.mio/current: The application process exited prematurely.

age/Cor/Con/CheckoutSession.cpp:284 ]: Cannot checkout session because a spawning error occurred.

目前(感谢engineersmnky的评论)这个错误消息的解释是ruby认为capistrano当前目录不存在。

以下是

/etc/httpd/conf.d
文件中的一些相关行:

<VirtualHost *:443>
  ...
  PassengerRuby /home/user/.rbenv/shims/ruby
  PassengerMinInstances 1
  ...
</VirtualHost>

PassengerPreStart https://...

这是在应用程序的

current
目录中运行一些命令的结果,该目录确实存在:

$ cat .ruby-version # 3.3.3
$ rbenv version # 3.3.3 (set by /var/www/me.mio/current/.ruby-version)
$ ruby -v # ruby 3.3.3 ...
$ which ruby # ~/.rbenv/shims/ruby
$ rbenv rehash # doesn't help
$ ls -l ~/.rbenv/versions/3.3.3/bin/ruby
-rwxr-xr-x 1 ... 217824 Jun 13 19:00 /home/user/.rbenv/versions/3.3.3/bin/ruby
$ ~/.rbenv/versions/3.3.3/bin/ruby -v # ruby 3.3.3 ...

最后,这是

passenger-status
的输出。请注意
me.mio
应用程序(有问题的应用程序)与其他应用程序之间的区别。

Version : 6.0.23
Date    : 2024-09-03 10:39:24 +0000
Instance: LEqbzjUQ (Apache/2.4.37 (AlmaLinux) OpenSSL/1.1.1k Phusion_Passenger/6.0.23)

----------- General information -----------
Max pool size : 6
App groups    : 5
Processes     : 4
Requests in top-level queue : 0

----------- Application groups -----------
/var/www/me.mio/current (production):
  App root: /var/www/me.mio/current
  Requests in queue: 0

/var/www/smd/current (production):
  App root: /var/www/smd/current
  Requests in queue: 0
  * PID: 128934   Sessions: 0       Processed: 7       Uptime: 1h 15m 50s
    CPU: 0%      Memory  : 78M     Last used: 3m 35s

/var/www/wd/current (production):
  App root: /var/www/wd/current
  Requests in queue: 0
  * PID: 129234   Sessions: 0       Processed: 11      Uptime: 1h 15m 45s
    CPU: 0%      Memory  : 77M     Last used: 13m 40s

/var/www/me.hou/current (production):
  App root: /var/www/me.hou/current
  Requests in queue: 0
  * PID: 139227   Sessions: 0       Processed: 1       Uptime: 16m 15s
    CPU: 0%      Memory  : 68M     Last used: 16m 15s ag

/var/www/me.sta/current (production):
  App root: /var/www/me.sta/current
  Requests in queue: 0
  * PID: 132177   Sessions: 0       Processed: 1       Uptime: 56m 53s
    CPU: 0%      Memory  : 52M     Last used: 56m 53s ag

乘客生成的

/tmp/.../passenger-error-*.html
文件中没有任何有用的信息。

有人有任何想法或建议如何进一步调查吗?

ruby-on-rails apache passenger rbenv
1个回答
0
投票

Rubygems (3.5.17) 和 Bundler (2.5.11) 的版本不同步。这并不影响开发测试,但在部署时造成了问题。

删除

Gemfile.lock
中的bundler版本,运行
bundle update
,提交并重新部署修复它。

帮助注意到不同步版本的一种方法是运行

bin/cap production doctor
(或
bundle exec cap production doctor
)。

© www.soinside.com 2019 - 2024. All rights reserved.