2011-10-08 3 views
-1

나는 기본적으로 RSS 스크립트 &을 읽는 간단한 스크립트를 사용해 트위터에 푸시합니다.함수로 코드를 옮겼을 때 Ruby 스크립트가 실행되지 않는 이유는 무엇입니까?

스크립트는 제대로 작동하지만 함수를 모두 이동하고 함수를 호출하면 실행되지 않습니다. 이게 왜 그렇게?

가 여기에 작동하는 내용은 다음과 같습니다

require 'rubygems' 
require 'simple-rss' 
require 'open-uri' 
require 'bitly' 
require 'twitter' 

def setup_bitly() 
    puts "Bitly setup" 
    bitly_username = "<user-name>" 
    bitly_apikey = "R_<api-key>" 
    Bitly.use_api_version_3 
    bitly = Bitly.new(bitly_username, bitly_apikey) 
end 


def setup_twitter() 
    Twitter.configure do |config| 
    config.consumer_key = "<key>" 
    config.consumer_secret = "<secret>" 
    config.oauth_token = "<token>" 
    config.oauth_token_secret = "<secret>" 
    twitter = Twitter::Client.new 
    end 
end 


bitly = setup_bitly() 
twitter = setup_twitter() 
url = "http://stackoverflow.com/feeds/tag/ruby" 

puts 'Fetching and parsing feed: ' + url.to_s 
    rss = SimpleRSS.parse open(url) 

    rss.items.reverse.each_with_index do |i,idx| 
    u = bitly.shorten(i.link, :history => 1) 
    twitter_status = "#{i.title}" 
    puts twitter_status 
    twitter.update(twitter_status) 

    sleep 10 

end 

다음은 출력입니다 :

C:\Users\Sathya\Documents\code\read-feed>read-feed.rb 
Fetching and parsing feed: http://stackoverflow.com/feeds/tag/ruby 
Dynamic lists in rails 3 
Ruby add dynamic events using AASM 

내가 함수에 마지막 블록을 이동하는 경우, 그것은 실행되지 않습니다. "실행하지 않는다"는 것은 Ruby 인터프리터가 &을 종료하고 실행 (오류) 메시지가 없음을 의미합니다. 이게 왜 그렇게? 나는 윈도우 7 루비에 64 비트에서 실행 해요

C:\Users\Sathya\Documents\code\read-feed>read-feed.rb 

:

require 'rubygems' 
require 'simple-rss' 
require 'open-uri' 
require 'bitly' 
require 'twitter' 

def setup_bitly() 
    puts "Bitly setup" 
    bitly_username = "<username>" 
    bitly_apikey = "<api_key>" 
    Bitly.use_api_version_3 
    bitly = Bitly.new(bitly_username, bitly_apikey) 
end 


def setup_twitter() 
    Twitter.configure do |config| 
    config.consumer_key = "<key>" 
    config.consumer_secret = "<secret>" 
    config.oauth_token = "<token>" 
    config.oauth_token_secret = "<secret>" 
    twitter = Twitter::Client.new 
    end 
end 

def do_work() 
    url = "http://stackoverflow.com/feeds/tag/ruby" 
    puts 'Fetching and parsing feed: ' + url.to_s 
    rss = SimpleRSS.parse open(url) 
    rss.items.reverse.each_with_index do |i,idx| 
    u = bitly.shorten(i.link, :history => 1) 
    twitter_status = "#{i.title}" 
    puts twitter_status 
    twitter.update(twitter_status) 
    sleep 10 
end 

bitly = setup_bitly() 
twitter = setup_twitter() 
do_work() 

end 

내가 이것을 실행하는 경우는, 스크립트가 & 종료 될 실행 :

문제의 원인이되는 버전입니다 1.9.2p290

답변

3

이, 함수가 변수 bitlytwitter를 참조하지 않는 완벽하게 정상입니다.

다음과 같은 일을 수행 할 수 있습니다

  • 은 함수에 인수로 전달합니다.
  • 클래스에서 함수를 감싸고 @instance 변수를 사용하십시오.
  • 를 사용하여 전역 변수 (:)하지 마십시오)
+0

Err .. 네, 어리석은 것처럼 보입니다. 그렇죠?명백한 실수를 지적 해 주셔서 감사합니다 :) – Sathya

+1

+1 "please do not". –

1

오류없이 조용히 실행되고 있습니까?

  1. 당신은 do_work에서 twitter.update를 호출 범위 twitter라는 지역 변수를하지 않고 : 코드 적어도 2 문제이기 때문에이있다. bitly도 마찬가지입니다.

  2. 마지막 줄에는 end이 추가로 있습니다.

+0

여분의'end'이 있었어야하지만 범위에없는 변수에 대해 가장 눈부신 오류를 @yi_h 지적한다. 그리고 예, 스크립트가 실행됩니다! – Sathya

+0

그 여분의'end'은 무엇을위한 것입니까? 'ruby -c foo.rb foo.rb : 43 : 문법 오류, 예기치 않은 keyword_end, $ end'expected' –

+0

네 말이 맞아, 여분의 일을해서는 안된다. 거기에 있었다. – Sathya

관련 문제