2016-07-29 46 views
16

我有一個API模式的Rails 5應用程序,不會讓我運行rake routesrails s。我得到的錯誤是:LoadError:無法加載「偵聽」寶石(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) 

我驗證過listen是我的Gemfile開發組:

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 

而且,它在我的Gemfile.lock的:

$ 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) 

我已將捆綁包更新並捆綁安裝,並驗證gem install listen的工作原理。本週早些時候這個工作正在進行,但我沒有幸運地回到我的承諾。

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

我沒有看到它在vendor/cache,但我不知道是怎麼打的那個......

$ bundle package | grep 'listen' 

感謝幫助!

更新:

我可以 「修復」 通過把gem 'listen', '~> 3.1.5'在全球的Gemfile(從:development取出)的問題。然後所有的錯誤消失,一切正常,但這似乎是錯誤的。

回答

12

我發佈這個答案,但我不喜歡它。

我可以通過將gem 'listen', '~> 3.1.5'放入全局Gemfile(並從:development中刪除它)來「修復」問題。然後所有的錯誤消失,一切正常,但這似乎是錯誤的。

+0

現在有同樣的問題,對此有什麼更新? –

+0

@PetrosKyriakou不幸沒有。與此同時希望解決方案能夠爲您發佈作品。 – lostphilosopher

+0

好,是的,但是,我不喜歡這個解決方案比你更多...謝謝無論如何! –

17

你可能錯誤地在某一時刻設置了bundle install --without,反正我確實做了。

要恢復這個運行:

bundle config --delete without

我也跑bundle config --delete with我手動設置with選項以及錯誤。同時運行應該讓你回到默認行爲。

在刪除without配置後,我可以再次成功運行bundle install,之後我的rails srails db:migrate等工作。


可以確認,如果這是你的問題,通過運行bundle install,並期待在輸出第二最後一行。如果它指出:

Gems in the groups development and test were not installed.

這是肯定的上述解決方案應爲你工作。

30

如果您使用的是rails 5,並且您使用的是默認的config/environments/development.rb文件,那麼它將包含此行代碼。

config.file_watcher = ActiveSupport::EventedFileUpdateChecker 

這需要寶石聽。這把我的一點,因爲我在做一個軌道4個升級到軌道5

編輯: 忘記,如果你,如果你對此有何評論該行代碼提到了它不會需要聽寶石了

+2

謝謝。我需要評論這一行。這是一種沉默的依賴關係,它不會在捆綁器中顯示爲依賴關係。 –

+0

是啊評論它使上述錯誤消失。忘了提及那部分。 – Brandt

3

我有同樣的問題。感謝@newdark的回答,我想出了正確的解決方案。基本上我想在production模式下部署rails。但顯然在運行服務器之前忘了設置環境變量RAILS_ENV=production

因此,回顧一下,production模式的依賴項被安裝,而rails由於忘記設置RAILS_ENV=production而試圖以development模式啓動。如果我繼續將gem listen添加到production依賴關係中,我將以開發模式運行而不能注意到。

對我來說,解決的辦法是在執行任何rails命令之前完成export RAILS_ENV=production並保持依賴關係不變。希望我設法解釋。

4

我遇到同樣的問題,運行rails c

通過閱讀其他堆棧溢出post我沒有意識到,這是正常的,無論bundle exec rake命令或rails console在默認production環境中運行。

我想我會解決這個問題或者通過:

  1. 在〜/ .bash_profile中
  2. 明確地寫在我要執行的命令像bundle exec rake a_rake:task RAILS_ENV=productionrails console --env=production等環境...
  3. 加入 export RAILS_ENV=production
+0

我有同樣的問題,因爲我安裝我的'捆綁安裝--without發展test'應用程序,然後不指定'RAILS_ENV = production'運行它。所以我的應用程序在'development'模式下運行,沒有安裝開發的gem。 –

0

我用這個:bundle install --without development

錯誤:

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

在此之後,使用該代碼:

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

最後

bundle install 
相關問題