Mám rubínový skript na Linode VM, ktorý by som chcel bežať každú minútu.
Keď spustím rubínový skript ručne cez príkazový riadok, beží perfektne. Ale keď cron spustí súbor, hádže podivnú chybu:
undefined method `closed?" for nil:NilClass
[ "/Usr/lib/ruby/1.8/net/http.rb:1060:in request"", "/var/lib/gems/1.8/gems/httparty-0.7.3/lib/httparty/request.rb:69:in
vykonať "", "/var/lib/gems/1.8/gems/httparty-0.7.3/lib/httparty.rb:394:in perform_request"", "/var/lib/gems/1.8/gems/httparty-0.7.3/lib/httparty.rb:346:in
získať "", "/var/lib/gems/1.8/gems/httparty-0.7.3/lib/httparty.rb:426
Prešetrujem tento problém a zdá sa, že to má niečo spoločné s vyprázdneným prostredím, na ktorom cron spúšťa skript.
Potrebujem zdroj mé prostredie Ruby v súbore crontab? Ak áno, čo presne potrebujem?
Tu je môj env:
RubyGems Environment:
- RUBYGEMS VERSION: 1.3.5
- RUBY VERSION: 1.8.7 (2010-01-10 patchlevel 249) [i486-linux]
- INSTALLATION DIRECTORY: /var/lib/gems/1.8
- RUBY EXECUTABLE: /usr/bin/ruby1.8
- EXECUTABLE DIRECTORY: /var/lib/gems/1.8/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86-linux
- GEM PATHS:
- /var/lib/gems/1.8
- /root/.gem/ruby/1.8
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- http://gems.rubyforge.org/
which ruby: /usr/bin/ruby
Vdaka za pomoc!
odpovede:
2 pre odpoveď č. 1Keď cron spustí skripty, nezdieľa vaše prostredie. Zvyčajne je najjednoduchšia vec, ktorú musíte urobiť, ak napíšete skript wrap shell, ktorý vám poskytne všetko, čo potrebujete, a potom zavolá váš rubínový skript.
Napríklad väčšina mojich cron skriptov vyzerá niečo podobne
#!/bin/sh
. ${HOME}/.bashrc
# Do Stuff - here is where you would call your ruby script