2012-08-30 34 views
11

Tôi hiện đang thử nghiệm với chức năng chuyển động vào động cơ. Nó hoạt động độc đáo cho đến nay, nhưng tôi là một chút bối rối lý do tại sao một số bộ phận của động cơ luôn luôn tự động tải lại khi một cái gì đó thay đổi, và một số thì không.Rails Động cơ: Người giúp chỉ được tải lại khi khởi động lại máy chủ

Cụ thể, khi thêm phương thức trợ giúp, tôi phải khởi động lại máy chủ Rails, nếu không nó không được Rails nhìn thấy. Đây có phải là hành vi bình thường không? Dưới đây là phần có liên quan của động cơ của tôi:

components/iq_list.rb

# encoding: utf-8 
require 'iq_list/engine' 

# Load IqList Modules 
module IqList 
    extend ActiveSupport::Autoload 
    autoload :Helpers 
    autoload :Models 
    autoload :Controllers 
end 

components/iq_list/engine.rb

module IqList 
    class Engine < ::Rails::Engine 
    end 
end 

components/iq_list/helpers.rb

module IqList 
    module Helpers 
    extend ActiveSupport::Autoload 
    autoload :IqListHelper 
    end 
end 

thành phần/iq_list/người trợ giúp/iq_list_helper.rb

module IqList 
    module Helpers 
    module IqListHelper 
     def some_method 
     # ... 
     end 
    end 
    end 
end 

Tôi vẫn còn rất mới cho động cơ, và rất nhiều mã ở trên tôi đã lấy từ công việc của người khác, vì vậy hãy kiên nhẫn với tôi. Bất kỳ gợi ý nào đi đúng hướng đều được đánh giá cao.

+1

http://stackoverflow.com/questions/4713066/how-can-i-force-my-plugin- để tải lại-với-mỗi-yêu cầu – apneadiving

+0

Tại sao mã của bạn nằm bên dưới thư mục 'components'? Điều gì khiến bạn làm điều đó? Các thành phần là một tính năng cổ xưa của Rails (1.2). –

+0

Bạn sẽ đặt nó ở đâu? Như đã nói, tôi đã lấy mã từ một người khác, và tôi nghĩ rằng đó là bởi vì trong công cụ 'ứng dụng/thành phần' được tải lại đúng cách. Bạn sẽ đặt một động cơ bạn đang phát triển ở đâu? –

Trả lời

1

Dường như bạn có thể đang sủa nhầm cây bằng Động cơ. Nếu bạn đang cố gắng chỉ đơn giản là đạt được sự tách biệt của mối quan tâm, bạn có thể chỉ muốn làm cho một số lớp học ruby ​​cũ đồng bằng và dính chúng trong lib/ (theo một cách có tổ chức của khóa học).

Động cơ sẽ được phát triển riêng biệt từ dự án 'hiện tại' của bạn có khả năng được đưa vào qua đá quý. Những thay đổi về đá quý bao gồm sẽ cần khởi động lại máy chủ AFAIK của bạn.

1

Nếu bạn cần mã từ động cơ của bạn nạp lại trên tất cả các yêu cầu bạn cần phải đặt nó trong khối to_prepare của mã động cơ intialization

module IqList 
    class Engine < ::Rails::Engine 
    config.to_prepare do 
    ApplicationController.helper(IqListHelper) 
    end 
    end 
end 

Mã trong khối to_prepare được đảm bảo để chạy một lần trong sản xuất và mỗi thời gian trong phát triển.

thấy đường ray hướng dẫn cũng như là What does this Rails Engine code mean: config.to_prepare &method(:activate).to_proc

http://robots.thoughtbot.com/tips-for-writing-your-own-rails-engine

+0

Nếu bạn sử dụng ký pháp mô-đun và Engine của bạn có ApplicationController riêng, bạn nên sử dụng ':: ApplicationController .helper (IqListHelper) 'thay thế. –

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