我在 apache 上啟動乘客時遇到了 ruby?? gem 路徑問題。
環境:
ubuntu-20
passenger-6.0.14
ruby-3.0.4
Ruby 是使用 ruby??-install 在系統范圍內安裝的,位于
/opt/rubies/ruby-3.0.4
chruby 用于設定 ruby?? 環境。
ruby 應用程式和 gems(希望)是基于每個用戶和每個應用程式安裝的。在這種情況下,redmine 是唯一的應用程式。
當我訪問新創建的 redmine 站點時,由于 gem 路徑問題,乘客無法啟動 rails:
Raw Bundler exception:
Bundler was unable to find one of the gems defined in the Gemfile
Bundler tried to load the gems from #<struct Bundler::Settings::Path explicit_path=nil, system_path=false>
Could not find rails-6.1.4.7, rouge-3.28.0, ...
這些寶石實際上是存在的:
$ cd ~
$ find . | grep rails-6.1.4
./.gem/ruby/3.0.4/specifications/rails-6.1.4.7.gemspec
./.gem/ruby/3.0.4/cache/rails-6.1.4.7.gem
./.gem/ruby/3.0.4/gems/rails-6.1.4.7
./.gem/ruby/3.0.4/gems/rails-6.1.4.7/README.md
虛擬主機的 apache ssl 啟動如下所示:
<IfModule mod_passenger.c>
PassengerRoot /home/test_user/.gem/ruby/3.0.4/gems/passenger-6.0.14
PassengerDefaultRuby /opt/rubies/ruby-3.0.4/bin/ruby
</IfModule>
...
Include rubies/test_user.include
并且 rubies/test_user.include 有:
<Directory /var/www/html/issues-test>
PassengerAppRoot /home/test_user/redmine_test
PassengerAppEnv redmine_test
PassengerAppGroupName redmine_test
RailsBaseURI /issues-test
PassengerUser test_user
PassengerGroup test_user
PassengerFriendlyErrorPages on
</Directory>
安裝 redmine 的用戶的 gem 環境:
- RUBYGEMS VERSION: 3.2.33
- RUBY VERSION: 3.0.4 (2022-04-12 patchlevel 208) [x86_64-linux]
- INSTALLATION DIRECTORY: /home/test_user/.gem/ruby/3.0.4
- USER INSTALLATION DIRECTORY: /home/test_user/.gem/ruby/3.0.0
- RUBY EXECUTABLE: /opt/rubies/ruby-3.0.4/bin/ruby
- GIT EXECUTABLE: /usr/bin/git
- EXECUTABLE DIRECTORY: /home/test_user/.gem/ruby/3.0.4/bin
- SPEC CACHE DIRECTORY: /home/test_user/.local/share/gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /opt/rubies/ruby-3.0.4/etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /home/test_user/.gem/ruby/3.0.4
- /opt/rubies/ruby-3.0.4/lib/ruby/gems/3.0.0
- SHELL PATH:
- /home/test_user/.gem/ruby/3.0.4/bin
- /opt/rubies/ruby-3.0.4/lib/ruby/gems/3.0.0/bin
- /opt/rubies/ruby-3.0.4/bin
- /usr/local/sbin
- /usr/local/bin
- /usr/sbin
- /usr/bin
- /sbin
- /bin
- /snap/bin
請注意,shell PATH 不包括
/home/test_user/.gem/ruby/3.0.4/gems/
小路; 并且 test_user.include 沒有為乘客顯示寶石的路徑。
我不清楚 ruby??/passenger 如何為寶石建立路徑。
乘客安裝是從用戶環境中完成的。
注意:我也不清楚安裝目錄為什么顯示
/home/test_user/.gem/ruby/3.0.4
但用戶安裝目錄顯示
/home/test_user/.gem/ruby/3.0.0.
(在某些時候我可能已經完成了 ruby??-install 3.0 并且它安裝了 3.0.4)。但是,沒有目錄 ~/.gem/ruby/3.0.0
uj5u.com熱心網友回復:
這里有幾個問題。感謝@Casper 的一些提示。
- 乘客必須在系統范圍內安裝,即以 root 身份安裝。
它是作為 redmine 用戶安裝的,所以必須卸載。檢查apache 的乘客卸載頁面,它顯示“洗掉乘客檔案”,然后詳細說明如何執行此操作,假設乘客以任何方式安裝,但從源代碼除外。
不幸的是,我是從源代碼安裝的,因為常規存盤庫已經過時了。從源代碼卸載并非易事,因為乘客檔案與其他應用程式檔案混合在一起,沒有簡單的方法可以找到它們并加以區分。我最終為用戶洗掉了整個 ruby?? / redmine 環境并重新開始。
要以 root 身份安裝乘客,請在 ruby??-install/chruby 環境中:
sudo -i
cd /opt/rubies
source /usr/local/share/chruby/chruby.sh
chruby 3.0.4
gem install passenger
passenger-install-apache2-module
exit
一旦在全球范圍內重新安裝了乘客,嘗試為特定用戶設定 redmine 仍然失敗,并出現相同的錯誤——Bundler 找不到任何 gem。我閱讀了幾個不需要明確設定 GEM_PATH 的地方,因為如果在常規位置,Passenger/Ruby/Bundler 應該能夠自動找到他們需要的寶石,但顯然不是。我的假設是,由于 redmine 應用程式的乘客定義正確指定了用戶環境,因此應該找到它們。(我不清楚這個問題是特定于Passenger、Apache2 安裝還是Ruby/Bundler)問題可能是因為我使用的是ruby-install 而不是rvm;乘客的檔案似乎假設 rvm 被用作安裝程式。無論如何,我必須在 apache2 配置中明確設定 GEM_PATH。如果從用戶帳戶給出“gem env GEM_PATH”,則顯示的路徑。因此,對于這種情況,在(上面的檔案 rubies/test_user.include)中,添加以下行:
SetEnv GEM_PATH /home/test_user/.gem/ruby/3.0.4/:/opt/rubies/ruby-3.0.4/lib/ruby/gems/3.0.0/
完整的 apache2 配置片段如下所示:
<Directory /var/www/html/issues-test>
PassengerAppRoot /home/test_user/redmine_test
PassengerAppEnv redmine_test
PassengerAppGroupName redmine_test
RailsBaseURI /issues-test
PassengerUser test_user
PassengerGroup test_user
PassengerFriendlyErrorPages on
SetEnv GEM_PATH /home/test_user/.gem/ruby/3.0.4/:/opt/rubies/ruby-3.0.4/lib/ruby/gems/3.0.0/
</Directory>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/482034.html
上一篇:WinHTTP導致ApacheWeb服務器(localhost)在WindowsVista上以http狀態400進行回應
