2012-02-12 35 views
8

Làm cách nào để buộc tải lại đá quý cho mọi yêu cầu?Làm thế nào để tải lại đá quý cho mọi yêu cầu trong Rails 3.2?

Tôi phát triển một viên ngọc và muốn tải lại mã đá quý của mình mỗi khi tôi làm mới trang trong trình duyệt. My Gemfile:

gem "my_gem", :path => "../my_gem" 

Để giải quyết vấn đề, tôi đã thử mọi đề xuất được liệt kê trong lưu trữ. Không có gì giúp được. Cũng đã tìm thấy hai tham số cấu hình Rails: watchable_dirs và watchable_files. Đã cố gắng sử dụng chúng nhưng chúng cũng không hiệu quả đối với tôi.

+3

Ai đó phải hỏi: * Tại sao? * Bạn đang cố giải quyết vấn đề gì? –

+4

@Jordan câu hỏi là hiển nhiên: bởi vì ông đang phát triển một viên ngọc, ông muốn thay đổi và gỡ lỗi nó liền mạch. – apneadiving

+0

Tôi đoán, bạn nên yêu cầu đá quý của mình bằng câu lệnh 'to_prepare' trong tệp khởi tạo của nó, xem http://guides.rubyonrails.org/configuring.html#initialization-events – apneadiving

Trả lời

2

Bạn nên đánh dấu các lớp bạn muốn tải lại là không thể tải xuống bằng cách sử dụng ActiveSupport :: Phương thức không thể tải xuống phụ thuộc;

class YourClass 
    unloadable 
end 

http://apidock.com/rails/ActiveSupport/Dependencies/Loadable/unloadablehttp://robots.thoughtbot.com/post/159805560/tips-for-writing-your-own-rails-engine

nên cung cấp cho bạn một số nền tảng. Ngoài ra, bạn có thể tự nạp lại như thế này;

Object.send(:remove_const, 'YOUR_CLASS') if Object.const_defined?('YOUR_CLASS') 
GC.start 
load 'path/to/your_file.rb' 
+0

vấn đề là tôi xây dựng một mô-đun và sau đó bao gồm nó vào ActionView: 'ActionView :: Base.send: include, MyGem :: Helper'. Vì vậy, tôi không có lớp học. Trong trường hợp này, tôi nên sử dụng phương thức 'unloadable' ở đâu? – Vadim

+0

Hoàn hảo, điều này đã giải quyết được vấn đề cho tôi! Tôi chỉ đặt 'unloadable nếu Rails.env.development?' Vào module của tôi, và nó hoạt động giống như một sự quyến rũ. Cảm ơn bạn! –

2

Tôi đã trích dẫn một chút về việc tìm kiếm điều này, nhưng cuối cùng phải mất một số thử và sai.

lib/my_gem/my_gem.rb:

require 'active_support/dependencies' 
ActiveSupport::Dependencies.autoload_paths += [File.expand_path("..", __FILE__)] 

module MyGem 
    include ActiveSupport::Dependencies 
    unloadable 
end 

Hãy chắc chắn để thêm “unloadable” cho tất cả các lớp học của bạn là tốt.

Các vấn đề liên quan