không thể tải tập tin đó - bundler / setup (LoadError)


128

Tôi đang cài đặt ứng dụng Rails 4 với Ruby 2.0, nhưng tôi nhận được "Không thể khởi động ứng dụng web" và nhận được dấu vết này:

cannot load such file -- bundler/setup (LoadError)
  /usr/local/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require'
  /usr/local/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/lib/phusion_passenger/loader_shared_helpers.rb:212:in `run_load_path_setup_code'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:96:in `preload_app'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:150:in `<module:App>'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:28:in `<main>'

Apache2.conf của tôi là:

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/buildout/apache2/mod_passenger.so
   PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19
   PassengerDefaultRuby /usr/local/bin/ruby

bundle -v Là:

Bundler version 1.3.5

ruby -v Là:

ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]

gem env Là:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.1.5
  - RUBY VERSION: 2.0.0 (2013-06-27 patchlevel 247) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /usr/local/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/lib/ruby/gems/1.8/bin
  - SPEC CACHE DIRECTORY: /root/.gem/specs
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/lib/ruby/gems/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /root/.gems/bin
     - /usr/lib/ruby/gems/1.8/bin/
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/bin/X11
     - /usr/games
     - /usr/sbin
     - /sbin

echo $GEM_PATH Là:

/usr/lib/ruby/gems/1.8:/usr/lib/ruby/gems/1.8

Không nên GEM_PATH/usr/lib/ruby/gems/2.0?

Bên trong máy chủ ảo trong apache2.conf tôi đã thêm:

SetEnv GEM_HOME /usr/lib/ruby/gems/1.8

Và bây giờ nó đang hoạt động.

Đây có phải là cách đúng đắn để khắc phục điều này?

Câu trả lời:


49

Có thể là đã có Ruby env trước đó được cài đặt trên hệ thống của bạn trước khi cài đặt 2.0? Điều này có thể đã có một GEM_PATH hiện có dẫn đến thư mục /1.8 mà việc cài đặt phiên bản 2.0 chỉ đơn giản là lưu giữ.

Sau đó, vấn đề mà bạn có khả năng gặp phải là Hành khách / Apache đang tìm kiếm trong thư mục /2.0 khi thực tế các viên đá quý nằm trong thư mục /1.8. Việc bạn nói với apache một cách rõ ràng để sử dụng thư mục /1.8 do đó có ý nghĩa để khắc phục vấn đề.

SetEnv GEM_HOME /usr/lib/ruby/gems/1.8

Bạn cũng có thể thử sử dụng Trình quản lý phiên bản Ruby để xử lý nhiều env của Ruby.

Một số điều tôi tìm thấy trong Google:


202

Tôi đã có lỗi gần như chính xác và có thể khắc phục hoàn toàn bằng cách chạy:

gem install bundler

Có thể cài đặt gói của bạn bị hỏng hoặc bị thiếu - đó là những gì đã xảy ra trong trường hợp của tôi. Lưu ý rằng nếu thất bại ở trên, bạn có thể thử:

sudo gem install bundler

... nhưng nói chung bạn có thể làm điều đó mà không cần sudo.


2
Đó là tôi! Câu hỏi - là sudothực sự cần thiết? Tôi đã sử dụng sudonhưng bây giờ tôi tự hỏi điều gì sẽ xảy ra nếu tôi không.
Pete

2
Nếu bạn đang sử dụng phiên bản Ruby khác với mặc định của hệ thống, bạn cần KHÔNG sử dụng sudo! sudo gem ....sẽ cài đặt defaultphiên bản đá quý và (trong trường hợp của tôi, Ubuntu 14.04) sudokhông thể chạy rvm.
Farfromunique

1
Trên hệ thống macOS của tôi, tôi cần sudocho ruby ​​mặc định của hệ thống, nhưng không cần nó cho bất kỳ phiên bản ruby ​​nào tôi đã cài đặt với rvm.
Ben Visness

1
Chỉ cần một lưu ý để nói rằng đây là giải pháp cho tôi khi sử dụng Windows subsystem cho Linux, sau bản cập nhật Windows gần đây. Vì một số lý do, bản cập nhật đã thổi bay các bản cài đặt ruby ​​RVM của tôi.
Ben Fulton

1
Xin chào, tôi có vấn đề tương tự như câu hỏi sử dụng ubfox với gem 2.7.6ruby 2.5.0p0phải làm gì?
TheCrazyProfưởng

28

Bạn rất có thể đã cài đặt nhiều hơn một Ruby.

Nếu bạn đang sử dụng RVM, có lẽ bạn cần phải chạy:

rvm use system

để thiết lập phiên bản của ruby ​​để sử dụng.

Xem http://rvm.io/rubies/default

ruby -v

sẽ cho bạn biết phiên bản bạn đang sử dụng.


25

Bạn có thể thử chạy:

bundle exec rake rails:update:bin

Như @Dinesh đã đề cập trong Rails 5:

rails app:update:bin

10

Trong trường hợp của tôi, các dòng được nối vào tệp cấu hình apache sau khi cài đặt hành khách như sau:

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-.0.24/buildout/apache2/mod_passenger.so 
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-4.0.24 
PassengerDefaultRuby /usr/bin/ruby1.8

Nhưng ứng dụng yêu cầu Ruby 2.0.0 nên tôi phải mất một lúc nhưng cuối cùng, lỗi đã được khắc phục sau khi chỉ định một đường dẫn khác bằng cách sử dụng 'PasbahRuby' bên dưới, trong tệp cấu hình máy chủ ảo Apache cho ứng dụng:

...
VirtualHost *:80>
  ServerName www.yourhost.com

 **PassengerRuby /home/user/.rvm/gems/ruby-2.0.0-p247**
  # !!! Be sure to point DocumentRoot to 'public'!
  DocumentRoot /somewhere/public    
  <Directory /somewhere/public>
     # This relaxes Apache security settings.
     AllowOverride all
     # MultiViews must be turned off.
     Options -MultiViews
  </Directory>
</VirtualHost...

Đây là trường hợp với tôi là tốt. Trong trường hợp của tôi PassengerDefaultRubyđã đề cập đến một cài đặt cũ của ruby.
Waseem

8

Tôi đã gặp lỗi này trong một ứng dụng Rails mới với gói được cài đặt chính xác. Nhận xét về viên ngọc mùa xuân trong Gemfile đã giải quyết vấn đề.


4
Đây là nó cho tôi nhưng gem install springthay vì bình luận.
jakenberg

3

Tôi gặp vấn đề tương tự, nhưng tôi nghĩ rằng đó là do springlưu trữ một số đá quý và cấu hình. Tôi đã sửa nó bằng cách chạy gem pristine --all.

Điều này khôi phục đá quý được cài đặt để điều kiện nguyên sơ từ các tệp nằm trong bộ đệm đá quý.

hoặc bạn chỉ có thể thử cho đá quý của bạn như

gem pristine your_gem_name

1

Điều này đã xảy ra trong môi trường sản xuất cho tôi.

rm /vendor/bundle

sau đó bundle install --deployment

giải quyết vấn đề.


1

Tình huống khác có thể xảy ra: bạn có nhiều người dùng được xác định trong môi trường máy chủ của bạn. Trong trường hợp đó, chạy

passenger-config --ruby-command

sẽ cung cấp cho bạn lệnh cần thiết để chỉ định nginx/sites-enabled/relevant_applicationtệp của bạn với trường hợp sử dụng của bạn, ví dụ:

passenger-config was invoked through the following Ruby interpreter:
Command: /home/other_user/.rbenv/versions/2.4.5/bin/ruby
Version: ruby 2.4.5p335 (2018-10-18 revision 65137) [x86_64-linux]
To use in Apache: PassengerRuby /home/other_user/.rbenv/versions/2.4.5/bin/ruby
To use in Nginx : passenger_ruby /home/other_user/.rbenv/versions/2.4.5/bin/ruby
To use with Standalone: /home/other_user/.rbenv/versions/2.4.5/bin/ruby /usr/bin/passenger start

1

tôi đã có cùng một vấn đề và đã thử tất cả các câu trả lời mà không gặp may mắn.

Các bước tôi đã làm để tái tạo:

  1. rvm instal 2.1.10
  2. rvm gemset create my_gemset
  3. rvm use 2.1.10@my_gemset
  4. bundle install

tuy nhiên bundle installđã cài đặt Rails, nhưng tôi vẫn nhận được cannot load such file -- bundler/setup (LoadError)

cuối cùng đã chạy gem install rails -v 4.2


1

Phiên bản Bundler có thể gây ra vấn đề.

Vui lòng cài đặt gói với số phiên bản khác.

Ví dụ,

gói cài đặt đá quý -v 1.0.10


Trong trường hợp của tôi, lỗi này xảy ra sau khi cài đặt bundler v2 . Tôi giải quyết nó với gem uninstall -a bundler; gem install bundler -v '<2.0'.
SergA

0

Tôi đã có điều này bởi vì một cái gì đó xấu là trong tôi vendor/bundle. Không có gì để làm với Apache, chỉ trong địa phương dev env.

Để khắc phục, tôi đã xóa vendor\bundlevà cũng xóa tham chiếu đến nó .bundle/configđể nó không được sử dụng lại.

Sau đó, tôi gói lại (mà sau đó được cài đặt để GEM_HOMEthay thế vendor/bundlevà vấn đề đã biến mất.


0

LƯU Ý: Công ty lưu trữ của tôi là Site5.com và tôi có VPS được quản lý.

Tôi đã thêm các biến env cho cả GEM_HOME và GEM_PATH vào tệp .htaccess trong thư mục public_html của tôi (một bí danh cho thư mục chung trong ứng dụng rails)

Chúng không cần thiết trước đây nên có gì đó đã thay đổi ở phía chủ nhà. Nó đã gặp lỗi này sau khi chạm vào tệp restart.txt để khởi động lại máy chủ hành khách.

Có GEM_PATH bằng cách:

tiếng vang $ GEM_PATH

Có GEM_HOME bằng cách:

đá quý env

 RubyGems Environment:
   - RUBYGEMS VERSION: 2.0.14
   - RUBY VERSION: 2.0.0 (2013-11-22 patchlevel 353) [x86_64-linux]
   - INSTALLATION DIRECTORY: /home/username/ruby/gems
   - RUBY EXECUTABLE: /usr/local/ruby20/bin/ruby
   - EXECUTABLE DIRECTORY: /home/username/ruby/gems/bin
   - RUBYGEMS PLATFORMS:
     - ruby
     - x86_64-linux
   - GEM PATHS:
      - /home/username/ruby/gems
      - /usr/local/ruby2.0/lib64/ruby/gems/
   - GEM CONFIGURATION:
      - :update_sources => true
      - :verbose => true
      - :backtrace => false
      - :bulk_threshold => 1000
      - "gem" => "--remote --gen-rdoc --run-tests"
      **- "gemhome" => "/home/username/ruby/gems"**
      - "gempath" => ["/home/username/ruby/gems", "/usr/local/ruby2.0/lib64/ruby/gems/"]
      - "rdoc" => "--inline-source --line-numbers"
   - REMOTE SOURCES:
      - https://rubygems.org/

Đã cập nhật tệp .htaccess với các dòng sau:

SetEnv GEM_HOME /usr/local/ruby2.0/lib64/ruby/gems/
SetEnv GEM_PATH /home/username/ruby/gems:/usr/local/ruby20/lib64/ruby/gems/:/home/username/ruby/gems:/usr/

0

Đối với tôi, vấn đề là liên kết RVM Ruby với Hành khách. Vì vậy, tôi cần phải tích hợp trình bao bọc ruby ​​RVM vào tập tin cấu hình hành khách.

Tôi tìm ra đường dẫn bọc ruby ​​rvm với lệnh:

passenger-config --ruby-command

Tôi lấy đường dẫn từ kết quả và nhập vào cấu hình hành khách trong nginx/passenger.conf:

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/local/rvm/gems/ruby-2.3.1/wrappers/ruby;

0

Tôi đã khắc phục vấn đề đó bằng cách tạo dự án đường ray thử nghiệm và cài đặt tất cả các viên đá quý sau đó tôi đã thay thế Gemfile.lock hiện tại của mình bằng thử nghiệm và mọi thứ đều hoạt động tốt.

Tôi nghĩ rằng vấn đề này từ bundlercác phiên bản với lưu trữ, vì vậy hãy chắc chắn rằng gói lưu trữ là cùng một phiên bản với dự án của bạn.


0

Trong tình huống của tôi, đó là vấn đề của các quyền:

 sudo chmod -R +777 <your_folder_path>

-1: Không bao giờ đặt 777 trên tệp hoặc thư mục. Nếu có sự phân chia giữa "chủ sở hữu", "nhóm" và "những người khác", thì đó là vì vấn đề bảo mật.
Florian Doyen

0

Phiên bản ruby ​​mà hành khách phusion đã được sử dụng được phân biệt với ứng dụng rails của bạn.

<IfModule mod_passenger.c>
  PassengerRoot /usr/local/rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/passenger-6.0.2
  PassengerDefaultRuby /usr/local/rbenv/versions/2.5.3/bin/ruby
</IfModule>

Đảm bảo phiên bản trên httpd config giống với ứng dụng rails.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.