2016-08-19 127 views
1

操作系統:Ubuntu安裝在Docker上,而Ubuntu安裝在我的個人筆記本電腦上。rake命令沒有從cron作業運行,但以其他方式運行

我運行這個cron作業:

*/5 * * * * /bin/bash -l -c "cd /home/deploy/railsapp && rake spec >> cron.log 2>&1" 

我與束EXEC耙規範試了一下,沒有/斌/ bash中,與每當寶石,與在/ usr/local/bin目錄/耙規範,但除了這些錯誤之外,還沒有發生任何事

錯誤日誌文件上運行的cron作業:

/bin/bash: bundle: command not found 


/bin/bash: rake: command not found 


rake aborted! 
Bundler::GemNotFound: Could not find rake-11.2.2 in any of the sources 
/home/deploy/railsapp/config/boot.rb:3:in `<top (required)>' 
/home/deploy/railsapp/config/application.rb:1:in `<top (required)>' 
/home/deploy/railsapp/Rakefile:4:in `<top (required)>' 
LoadError: cannot load such file -- bundler/setup 
/home/deploy/railsapp/config/boot.rb:3:in `<top (required)>' 
/home/deploy/railsapp/config/application.rb:1:in `<top (required)>' 
/home/deploy/railsapp/Rakefile:4:in `<top (required)>' 
(See full trace by running task with --trace) 


    bundler: failed to load command: rake (/usr/local/bin/rake) 
     Bundler::GemNotFound: Could not find rake-11.2.2 in any of the sources 
      /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/spec_set.rb:95:in `block in materialize' 
      /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/spec_set.rb:88:in `map!' 
      /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/spec_set.rb:88:in `materialize' 
      /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/definition.rb:140:in `specs' 
      /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/definition.rb:185:in `specs_for' 
      /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/definition.rb:174:in `requested_specs' 
      /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/environment.rb:19:in `requested_specs' 
      /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:14:in `setup' 
      /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler.rb:95:in `setup' 
      /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/setup.rb:19:in `<top (required)>' 
      /usr/local/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
      /usr/local/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require' 

在命令行手動運行rake spec其工作正常,但在cron它給這個錯誤。 任何想法?

+1

你用同一個用戶運行cron嗎?看起來用戶cron在doe上運行無法訪問所需的gem。 – neongrau

+0

嗨,謝謝你的回答,它以根用戶身份運行,操作系統中沒有用戶..它只有root用戶,在Docker中作爲容器運行 – user1735921

+0

也許docker是問題的原因嗎?嘗試爲問題添加「docker」標籤,並在問題文本中寫下它。 – gambala

回答

2

我很確定這個問題是由不正確的環境造成的。基本上cron使用最小的環境運行,所以它不知道關於例如.bashrc文件(其中您有rvmrbenv初始化和PATH設置)的設置。

源使用.因此改寫cron項類似環境中的文件:

*/5 * * * * /bin/bash -l -c ". /etc/environment && cd /home/deploy/railsapp && rake spec >> cron.log 2>&1" 

注意/etc/environment只是一個例子。您可以改爲像.bashrc這樣的文件。

+0

我在.bashrc中沒有rbenv或rvm路徑我檢查過alll.bashrc – user1735921

+0

但是您使用的是rbenv或rvm,對不對?如果是的話,你應該在環境文件中有相關的代碼。沒有它,它就無法工作。 – smefju

+0

在/home/myuser/.bashrc中找到它...它的rbenv。但是同樣的錯誤:Bundler :: GemNotFound:在任何源代碼中都找不到rake-11.2.2,我安裝了兩個rake,其中一個是10.something,另一個是11.2.2,兩者都在同一個目錄中,名爲gems。 – user1735921

0

使用whenever寶石 - 這是cron的適配器,支持rake任務和其他ruby/rails的東西。

+0

已經在使用它,得到相同的錯誤。 – user1735921