2010-09-07 49 views
1

我實際上使用Rails 3.0,所以它是rails console vs rails runner try.rb。以下代碼在控制檯中運行良好,但不能作爲運行程序的腳本運行。我需要跑步者(而不是使用ruby try.rb),因爲項目有一些ActiveRecord代碼。一些Ruby代碼在腳本/控制檯中運行良好,但沒有腳本/運行器,爲什麼?

更新:我不能運行它的myproj\lib\tasks\內(在當前目錄是myproj\lib\tasks\),但可以在myproj內運行,所以問題就來了,爲什麼一定要它在myproj運行?

http_header = {'User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.53 Safari/534.3'} 

url = URI.parse('http://www.google.com/') 

response = Net::HTTP.start(url.host, url.port) do |http| 
    http.get(url.path, http_header) 
end 

puts response.body 

錯誤代碼是:

c:\ror\proj\lib\tasks>rails runner try.rb 
c:/ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.0/lib/rails/commands/runner.rb:50:in `eval': no method name given (ArgumentError) 
     from c:/ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.0/lib/rails/commands/runner.rb:50:in `eval' 
     from c:/ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.0/lib/rails/commands/runner.rb:50:in `<top (required)>' 
     from c:/ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.0/lib/rails/commands.rb:39:in `require' 
     from c:/ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.0/lib/rails/commands.rb:39:in `<top (required)>' 
     from script/rails:6:in `require' 
     from script/rails:6:in `<main>' 

回答

2

你在哪裏運行的命令?

您需要從軌道根目錄下的命令,並給出一個完整或相對路徑文件名,以便rails runner lib/try.rb

這樣做的原因是,該命令亞軍接受包含Ruby代碼文件的任何名稱或包含紅寶石代碼的字符串。當命令運行程序找不到argv(0)中指定的文件時,它會嘗試評估argv(0),因此它試圖評估字符串try.rb

+0

您意味着runner實際上試圖找到文件'try。 rb'從項目的根目錄開始?難道不是真的就像其他任何命令一樣,比如'more'(在unix)或'cat'(在pc上)? – 2010-09-07 08:43:44

+0

我相信大多數rails命令都假定它們在RAILS_ROOT中運行,所以它們知道app/lib/etc在哪裏。 – 2010-09-07 08:55:03

相關問題