2011-10-21 45 views
14

Tôi vừa mới nâng cấp ứng dụng của mình từ 1.8.7 lên 1.9.2 bằng RVM và phải thêm RubyGems và Bundler, chạy gói cài đặt và có mọi thứ để làm việc ngoại trừ SystemTimer. Google-fu không trả lại gì và tôi thấy những người khác đã gặp vấn đề với nó trong phiên bản 1.9 nhưng một số đã khiến nó hoạt động. Bất kỳ ý tưởng?Làm thế nào để cài đặt SystemTimer trên 1.9.2?

pawel:bodb pawel$ sudo gem install SystemTimer 
Building native extensions. This could take a while... 
/Users/pawel/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/ext/builder.rb:48: warning: Insecure world writable dir /usr/local/bin in PATH, mode 040777 
ERROR: Error installing SystemTimer: 
ERROR: Failed to build gem native extension. 

/Users/pawel/.rvm/rubies/ruby-1.9.2-p290/bin/ruby extconf.rb 
creating Makefile 

make 
/usr/bin/gcc-4.2 -I. -I/Users/pawel/.rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/x86_64-darwin10.3.0 
-I/Users/pawel/.rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/ruby/backward -I/Users/pawel/.rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1 -I. 
-D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -fno-common -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers 
-Wshorten-64-to-32 -Wno-long-long -fno-common -pipe -o system_timer_native.o -c system_timer_native.c 
In file included from system_timer_native.c:8: 
/Users/pawel/.rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/ruby/backward/rubysig.h:14:2: warning: #warning rubysig.h is obsolete 
system_timer_native.c: In function ‘install_first_timer_and_save_original_configuration’: 
system_timer_native.c:46: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
system_timer_native.c:53: warning: passing argument 1 of ‘log_error’ discards qualifiers from pointer target type 
system_timer_native.c:57: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
system_timer_native.c:62: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
system_timer_native.c:65: warning: passing argument 1 of ‘log_error’ discards qualifiers from pointer target type 
system_timer_native.c:69: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
system_timer_native.c:82: warning: passing argument 1 of ‘log_error’ discards qualifiers from pointer target type 
system_timer_native.c:89: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
system_timer_native.c:96: warning: passing argument 1 of ‘log_error’ discards qualifiers from pointer target type 
system_timer_native.c:101: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
system_timer_native.c: In function ‘install_next_timer’: 
system_timer_native.c:112: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
system_timer_native.c:119: warning: passing argument 1 of ‘log_error’ discards qualifiers from pointer target type 
system_timer_native.c:123: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
system_timer_native.c:130: warning: passing argument 1 of ‘log_error’ discards qualifiers from pointer target type 
system_timer_native.c:136: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
system_timer_native.c:143: warning: passing argument 1 of ‘log_error’ discards qualifiers from pointer target type 
system_timer_native.c:146: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
system_timer_native.c: In function ‘restore_original_configuration’: 
system_timer_native.c:157: warning: passing argument 1 of ‘log_error’ discards qualifiers from pointer target type 
system_timer_native.c:160: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
system_timer_native.c:168: warning: passing argument 1 of ‘log_error’ discards qualifiers from pointer target type 
system_timer_native.c:170: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
system_timer_native.c:172: warning: passing argument 1 of ‘log_error’ discards qualifiers from pointer target type 
system_timer_native.c: In function ‘restore_original_timer_interval’: 
system_timer_native.c:190: warning: passing argument 1 of ‘log_error’ discards qualifiers from pointer target type 
system_timer_native.c:192: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
system_timer_native.c: In function ‘restore_sigalrm_mask’: 
system_timer_native.c:199: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
system_timer_native.c:201: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
system_timer_native.c: In function ‘install_ruby_sigalrm_handler’: 
system_timer_native.c:211: error: ‘rb_thread_critical’ undeclared (first use in this function) 
system_timer_native.c:211: error: (Each undeclared identifier is reported only once 
system_timer_native.c:211: error: for each function it appears in.) 
system_timer_native.c: In function ‘restore_original_ruby_sigalrm_handler’: 
system_timer_native.c:217: error: ‘rb_thread_critical’ undeclared (first use in this function) 
system_timer_native.c: In function ‘clear_pending_sigalrm_for_ruby_threads’: 
system_timer_native.c:266: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
system_timer_native.c: In function ‘set_itimerval’: 
system_timer_native.c:290: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
system_timer_native.c:295: warning: implicit conversion shortens 64-bit value into a 32-bit value 
system_timer_native.c:299: warning: passing argument 1 of ‘log_debug’ discards qualifiers from pointer target type 
make: *** [system_timer_native.o] Error 1 


Gem files will remain installed in /Users/pawel/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/SystemTimer-1.2.3 for inspection. 
Results logged to /Users/pawel/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/SystemTimer-1.2.3/ext/system_timer/gem_make.out 

Trả lời

25

Theo như tôi biết, SystemTimer không liên quan đến ruby ​​1.9 và không nên sử dụng với phiên bản này.

"Sử dụng đá quý này trong Ruby 1.9 là vô dụng và không có ý nghĩa gì! Hệ thống hẹn giờ đang cố gắng làm việc xung quanh một số giới hạn của mô hình" sợi xanh "được sử dụng trong Ruby 1.8 (MRI) Xem http://ph7spot.com/musings/system-timer để biết thêm chi tiết. "

+0

Được rồi, vì vậy những gì nên được sử dụng trong Ruby 1.9 thay vì 'SystemTimer.timeout_after'? – Nowaker

+0

OK, hãy xem. 'require 'timeout'; Timeout :: timeout (5) {...} ' – Nowaker

-3

Để cài đặt hệ thống hẹn giờ sử dụng lệnh này trong Terminal:

sudo gem install system_timer 
+0

Bạn không muốn sử dụng sudo với RVM. – Simpleton

+0

Điều này cũng sẽ không giúp ích gì vì system_timer sẽ không thể làm việc với Ruby 1.8.7 – professormeowingtons

3

Một thay thế thả-in cho SystemTimertimeout.rb từ Ruby lõi. Không cần bất kỳ đá quý bên thứ 3 nào.

Ruby 1,8:

require 'system_timer' 

SystemTimer.timeout_after(5.minutes, MyException) do 
    # your job here 
end 

của Ruby 1.9:

require 'timeout' 

Timeout.timeout(5.minutes, MyException) do 
    # your job here 
end 
Các vấn đề liên quan