2013-09-27 45 views
90

Tôi đang thiết Rails 4 ứng dụng với Ruby 2.0, nhưng tôi nhận được "ứng dụng Web không thể bắt đầu" và nhận được dấu vết này:không thể tải tập tin như vậy - bundler/setup (LoadError)

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 

nên không GEM_PATH được /usr/lib/ruby/gems/2.0?

Bên trong máy chủ ảo trong apache2.conf Tôi nói thêm:

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

Và bây giờ nó đang làm việc.

Đây có phải là cách phù hợp để sửa lỗi này không?

Trả lời

42

Có thể đã có một bản cài đặt trước đó của Ruby 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à giữ.

Vấn đề bạn có thể gặp phải khi đó là Hành khách/Apache đang tìm trong thư mục /2.0 khi trên thực tế các viên đá quý nằm trong thư mục /1.8. Apache rõ ràng của bạn để sử dụng thư mục /1.8 do đó làm cho tinh thần để sửa chữa vấn đề.

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

Bạn cũng có thể thử sử dụng Ruby Version Manager để xử lý nhiều envs của Ruby.

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

23

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

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 các 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.

9

Trong trường hợp của tôi, các đường nối vào tập tin 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 đòi hỏi của Ruby 2.0.0 nên nó đã cho tôi một thời gian nhưng cuối cùng, lỗi là giải quyết sau khi xác định một con đường khác nhau sử dụng 'PassengerRuby' bên dưới, bên trong tập tin cấu hình máy chủ ảo Apache cho các ứ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... 
+0

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

7

tôi đã nhận lỗi này trong một ứng dụng Rails tươi với bó cài đặt đúng. Nhận xét về đá quý mùa xuân ở Gemfile đã giải quyết được vấn đề.

+3

Điều này là dành cho tôi nhưng 'gem install spring' thay vì bình luận. – jakenberg

119

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

gem install bundler 

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

sudo gem install bundler 

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

+2

Đây là tôi! Câu hỏi - là 'sudo' thực sự cần thiết? Tôi đã sử dụng 'sudo' nhưng bây giờ tôi tự hỏi điều gì sẽ xảy ra nếu tôi không làm vậy. – Pete

+0

Trong trường hợp của tôi, có, nhưng tôi nghĩ rằng nó phụ thuộc vào hệ điều hành của bạn. Ban đầu tôi đã làm nó trên Linux Mint 17, nhưng trên một hộp OSX sudo có thể không cần thiết. Ngoài ra, tôi đã cài đặt tất cả các phần mềm khác liên quan đến Ruby của tôi bằng sudo. (Thực hành xấu, nhưng nó không phải cho các ứng dụng phải đối mặt với sản xuất tại thời điểm này anyway). –

+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 KHÔNG cần sử dụng 'sudo'! 'sudo gem ....' sẽ cài đặt phiên bản 'default' của gem, và (trong trường hợp của tôi, Ubuntu 14.04)' sudo' không thể chạy rvm. – Farfromunique

0

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

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

Sau đó, tôi lại kèm (mà sau đó cài đặt để GEM_HOME thay vì vendor/bundle và vấn đề đi đi

14

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

bundle exec rake rails:update:bin 

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

rails app:update:bin 
0

lƯU Ý: công ty lưu trữ của tôi là Site5.com và tôi có một VPS Managed

0.123.516.

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 công khai trong ứng dụng đường ray)

Chúng không cần thiết trước khi có điều gì đó phải thay đổi ở phía máy chủ . Có 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.

Got GEM_PATH bởi:

echo $ GEM_PATH

Got the GEM_HOME bởi:

đá 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 tin .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, sự cố liên quan đến RVM Ruby với Hành khách. Vì vậy, tôi cần tích hợp trình bao bọc RVM ruby ​​vào tệp cấu hình hành khách.

tôi tìm ra con đường wrapper RVM ruby ​​với lệnh:

passenger-config --ruby-command 

Tôi mất con đường từ kết quả và nhập vào một 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; 
Các vấn đề liên quan