Có cách nào để "tải lại" hoặc "làm mới" một rubygem trong bộ nhớ không? Khi tôi đang chơi trong irb, đôi khi tôi muốn sửa đổi các tệp gem của mình, và nếu tôi yêu cầu cùng một gem, nó không cập nhật vào bộ nhớ và cho đầu ra "false". Hiện tại tôi phải thoát IRB, quay trở lại IRB và sau đó yêu cầu lại gem, phải có cách tốt hơn ... nó là gì?Nạp lại rubygem trong IRB
Trả lời
Như những người khác đã đề xuất, bạn có thể sử dụng tải hạt nhân #. . Tuy nhiên, đừng lãng phí thời gian của bạn tìm kiếm và tải mỗi tập tin đá quý như tất cả các file mà đã được yêu cầu được lưu trong $" Với thông tin này, đây là một tải lại IRB lệnh:
def reload(require_regex)
$".grep(/^#{require_regex}/).each {|e| load(e) }
end
Ví dụ, nếu bạn đang sử dụng đá quý hirb trong IRB, bạn chỉ cần tải lại với:
>> reload 'hirb'
Nếu vì bất cứ lý do tải không hoạt động (đó là pickier về phần mở rộng tập tin hơn yêu cầu là), bạn có thể tái yêu cầu bất kỳ tập tin bằng cách đầu tiên xóa mục nhập của nó bằng $ ". Với lời khuyên này, lệnh trên sẽ là:
def reload(require_regex)
$".grep(/^#{require_regex}/).each {|e| $".delete(e) && require(e) }
end
Chọn tùy chọn nào phù hợp với bạn. Cá nhân, tôi sử dụng sau này.
Điều này cũng có tác dụng đối với các tập lệnh được bao gồm trong hệ thống tệp không? Nó không làm việc cho tôi ... và câu lệnh require của tôi trông như thế này: 'require' # {File.expand_path (__ FILE __)} /../ lib/query "' – picardo
Nó không, không. Regex quá hạn chế - bạn phải chỉ định đường dẫn đầy đủ. Tôi đã sửa đổi phiên bản của mình, thay thế^bằng /. – Trejkaz
tải 'filename.rb'
cùng một lúc cho mỗi đã được thay đổi ...
Một cách là sử dụng Kernel#load
. Bạn có thể sử dụng nó khá giống như Kernel#require
, ngoại trừ việc bạn phải bao gồm rõ ràng phần mở rộng của tệp. Tuy nhiên, nó có nhược điểm của nó (thậm chí một cái gì đó đơn giản như class Foo < Struct.new(:foo); end
thất bại, vì nó không thể thay đổi siêu lớp của một lớp), vì vậy tôi cũng muốn biết một cách tốt hơn để làm điều này.
Trong đường ray bạn có thể đạt được điều này với reload!
trên tập lệnh/bàn điều khiển, nhưng tôi không biết loại ma thuật nào họ sử dụng.
This gist có vẻ đầy hứa hẹn nhưng tôi chưa thử nghiệm.
'tải lại!' Chỉ được tải các thứ trong thư mục 'app /', không có gì hơn. Cũng có những hạn chế đối với điều này, đó là lý do tại sao nhiều lớp và bộ điều khiển của bạn xuất hiện dưới dạng các lớp ẩn danh trong môi trường phát triển của bạn để chúng có thể được xử lý hoàn toàn và được khởi tạo lại theo từng yêu cầu. – tadman
- 1. Đặt lại Bàn điều khiển IRB
- 2. Có cách nào để gọi ruby1.9 mà không cần nạp rubygem không?
- 3. Nạp lại bootstrap với Grails
- 4. Nạp lại đường ray initializers
- 5. Làm cách nào để hạ cấp rubygem?
- 6. nạp lại nhà cung cấp loại
- 7. rbenv irb history không lưu
- 8. Tương đương irb của Ruby trong Perl?
- 9. Tìm nạp datetime từ phao và ngược lại trong python
- 10. Tôi làm cách nào để tải lại tập lệnh trong IRB?
- 11. Không thể tìm thấy gói RubyGem
- 12. Nạp lại Kerberos config trong JAVA mà không cần khởi động lại JVM
- 13. Thay đổi thứ tự đọc của các nguồn Rubygem
- 14. Xác định rubygem nào bạn đang sử dụng
- 15. Tại sao lại là Module.methods() và respond_to? hoạt động khác nhau trong irb hơn trong kịch bản?
- 16. Nạp lại một jqGrid sau Jquery lựa chọn Ngày Picker
- 17. Làm mới/Nạp lại hiệu ứng phụ với ASP.net?
- 18. lịch sử IRB không làm việc
- 19. Tương tự IRB của python -i
- 20. Đường ray irb thư mục mặc định
- 21. Không thể nhập Umlauts trong Ruby 1.9.3 IRB
- 22. Các ký tự Unicode trong Ruby 1.9.3 IRB với RVM
- 23. Cách sử dụng các kỳ vọng RSpec trong irb
- 24. Nokogiri (RubyGem): Tìm kiếm và thay thế các thẻ HTML
- 25. rubygem memcached + lỗi lập luận Rlibmemcached với memcache_mget()
- 26. bạn có được phép xác định lại lớp học bằng ruby không? hoặc là điều này chỉ trong IRB
- 27. bảng điều khiển đường ray yêu cầu trả lại giá trị false (nhưng hoạt động trong irb)
- 28. mang lại các điều khiển được nạp lần cuối khi tôi khởi động lại máy
- 29. Tìm nạp nhiều trong ThenFetch
- 30. Nguyên mẫu JS nuốt lỗi trong dom: nạp, và gọi lại ajax?
nếu tôi viết mã chức năng này ở nơi nó nên đi? Rubygems? Cộng đồng đó có thường chấp nhận các yêu cầu kéo tính năng mới không? – Schneems