2016-07-29 15 views
16

Tôi đã có ứng dụng Rails 5 chế độ API sẽ không cho phép tôi chạy rake routes hoặc rails s. Các lỗi tôi nhận được là:LoadError: Không thể tải đá quý 'nghe' (Rails 5)

$ rake routes 
rake aborted! 
LoadError: Could not load the 'listen' gem. Add `gem 'listen'` to the development group of your Gemfile 
.../config/environment.rb:5:in `<top (required)>' 
LoadError: cannot load such file -- listen 
.../config/environment.rb:5:in `<top (required)>' 
Tasks: TOP => routes => environment 
(See full trace by running task with --trace) 

tôi đã xác minh rằng listen là trong nhóm phát triển trong Gemfile tôi:

group :development do 
    gem 'listen', '~> 3.1.5' 
    # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring 
    gem 'spring' 
    gem 'spring-watcher-listen', '~> 2.0.0' 
end 

Và rằng đó là trong Gemfile.lock tôi:

$ cat Gemfile.lock | grep 'listen' 
    listen (3.1.5) 
    spring-watcher-listen (2.0.0) 
     listen (>= 2.7, < 4.0) 
    listen (~> 3.1.5) 
    spring-watcher-listen (~> 2.0.0) 

Tôi đã cập nhật gói và đã cài đặt gói và xác minh rằng gem install listen hoạt động. Điều này đã được làm việc đầu tuần này, nhưng tôi không có may mắn trở lại thông qua cam kết của tôi.

$ ruby -v 
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin14] 

Tôi không nhìn thấy nó trong vendor/cache nhưng tôi không chắc chắn những gì để làm điều đó ...

$ bundle package | grep 'listen' 

Đánh giá cao sự giúp đỡ!

Cập nhật:

tôi có thể "sửa chữa" các vấn đề bằng cách đặt gem 'listen', '~> 3.1.5' trong Gemfile toàn cầu (và loại bỏ nó từ :development). Sau đó tất cả các lỗi biến mất và mọi thứ hoạt động, nhưng điều đó có vẻ sai.

Trả lời

12

Tôi đăng câu trả lời này nhưng tôi không thích câu trả lời.

Tôi có thể "khắc phục" sự cố bằng cách đặt gem 'listen', '~> 3.1.5' vào Gemfile toàn cầu (và xóa nó khỏi :development). Sau đó tất cả các lỗi biến mất và mọi thứ hoạt động, nhưng điều đó có vẻ sai.

+0

có cùng một vấn đề ngay bây giờ, bất kỳ bản cập nhật về vấn đề này? –

+0

@PetrosKyriakou tiếc là không. Hy vọng rằng các giải pháp được đăng làm việc cho bạn trong thời gian có ý nghĩa. – lostphilosopher

+0

vâng nó đã làm nhưng tôi không thích giải pháp này nhiều hơn bạn làm ... cảm ơn dù sao cho nó! –

17

Bạn có thể nhầm lẫn đã đặt bundle install --without tại một thời điểm nào đó, tôi chắc chắn đã làm được.

Để trở lại hoạt động này:

bundle config --delete without

Tôi cũng chạy bundle config --delete with như tôi tự đặt with tùy chọn cũng do nhầm lẫn. Chạy cả hai sẽ đưa bạn trở lại hành vi mặc định.

Sau khi xóa cấu hình without tôi có thể chạy thành công bundle install một lần nữa và sau đó rails s, rails db:migrate v.v. của mình đã hoạt động.


Bạn có thể xác nhận xem đây có phải là vấn đề của bạn hay không bằng cách chạy bundle install và xem dòng cuối cùng thứ hai trong đầu ra. Nếu trạng thái đó:

Gems in the groups development and test were not installed.

Đó là giải pháp chắc chắn ở trên sẽ phù hợp với bạn.

30

Nếu bạn đang ở trên đường ray 5 và bạn đang sử dụng tệp cấu hình mặc định cấu hình/môi trường/phát triển.rb, nó sẽ có dòng mã này trong đó.

config.file_watcher = ActiveSupport::EventedFileUpdateChecker 

Điều này yêu cầu đá quý lắng nghe. Đây ném tôi cho một chút như tôi đã làm một đường ray 4 nâng cấp một đường ray 5

chỉnh sửa: Quên nếu bạn đề cập đến nếu bạn nhận xét rằng dòng mã ra nó sẽ không cần nghe ngọc nữa

+2

Cảm ơn. Tôi cần phải bình luận ra dòng đó. Đây là loại phụ thuộc thầm lặng theo nghĩa là nó không hiển thị như là một phụ thuộc trong bundler. –

+0

Vâng Nhận xét nó ra làm cho lỗi ở trên biến mất. Quên đề cập đến phần đó. – Brandt

3

tôi có cùng một vấn đề. Nhờ câu trả lời @newdark tôi đã tìm ra giải pháp đúng. Về cơ bản tôi muốn triển khai đường ray ở chế độ production. Nhưng rõ ràng là quên đặt biến môi trường RAILS_ENV=production trước khi chạy máy chủ.

Vì vậy, để tóm tắt, phụ thuộc cho chế độ production đã được cài đặt trong khi đường ray cố gắng để bắt đầu trong chế độ development do quên để thiết lập RAILS_ENV=production. Nếu tôi tiếp tục thêm đá quý listen vào phụ thuộc production, tôi sẽ chạy trong chế độ phát triển mà không thể nhận thấy.

Đối với tôi giải pháp là làm export RAILS_ENV=production trước khi thực hiện bất kỳ lệnh nào của đường ray và giữ nguyên các phụ thuộc. Hy vọng tôi đã giải thích được.

4

Tôi gặp sự cố tương tự bằng cách chạy rails c.

Bằng cách đọc ngăn xếp ngăn xếp khác này post Tôi đã nhận ra rằng điều bình thường là cả hai lệnh bundle exec rake hoặc rails console đang chạy trong môi trường mặc định production.

tôi figured tôi sẽ giải quyết vấn đề bằng cách:

  1. thêm export RAILS_ENV=production trong ~/.bash_profile
  2. viết một cách rõ ràng môi trường mà tôi muốn các lệnh để thực hiện như bundle exec rake a_rake:task RAILS_ENV=productionrails console --env=production vv ...
+0

Tôi đã có cùng một vấn đề vì tôi đã cài đặt ứng dụng của mình với 'bundle install - without development test' và sau đó chạy nó mà không chỉ định' RAILS_ENV = production'. Vì vậy, ứng dụng của tôi đang chạy trong chế độ 'phát triển' mà không cần cài đặt gem phát triển. –

0

tôi sử dụng này: bundle install --without development

Lỗi:

Could not load the 'listen' gem. Add gem 'listen' to the development group of your Gemfile (LoadError)

Sau đó, sử dụng mã rằng:

bundle config --delete without 
bundle config --delete with 

Cuối cùng

bundle install 
Các vấn đề liên quan