6

Làm cách nào để bạn khởi tạo chính xác các plugin Redmine cần khởi tạo mô hình (đọc bản ghi cơ sở dữ liệu) được xác định trong chính plugin?Làm thế nào để tạo nhanh một mô hình trong plugin init.rb?

Ví dụ: Tôi có một plugin my_redmine_plugin đi kèm với một mô hình MyPluginModel. Mở Plugin khởi, tôi muốn

  • đọc một kỷ lục MyPluginModel từ DB
  • chạy một số mã khởi tạo với kỷ lục

Với đoạn mã sau:

require 'redmine' 

Redmine::Plugin.register :my_redmine_plugin do 
    name 'My Redmine Plugin' 

    # ...  
end 

Rails.configuration.to_prepare do 
    m = MyPluginModel.find(1) 
    run_some_init_code(m) 
end 

Có vẻ như to_prepare chạy trước khi di chuyển:

$ bundle exec rake redmine:plugins:migrate NAME=my_redmine_plugin 

`table_structure': Could not find table 'mypluginmodel' (ActiveRecord::StatementInvalid) 
... 

Khi tôi nhận xét khối to_prepare trong quá trình di chuyển, mọi thứ đều hoạt động tốt. Có cách nào để phát hiện quá trình di chuyển không?

Trả lời

0

Hãy thử sử dụng after_initialize thay vì to_prepare. Đây không phải là một vấn đề Redmine - Quá trình khởi tạo đường ray có các móc khác nhau được chạy vào các thời điểm khác nhau trong khi khởi động. Xem the API docs để biết thêm thông tin.

Cập nhật: suy nghĩ về điều này có thể vẫn không giúp ích cho việc di chuyển - bạn chỉ có thể giải cứu từ lỗi đó trong móc của bạn.

+0

Khi chỉ đơn giản là bắt ngoại lệ, tôi vẫn phải tìm cách phát hiện xem nó có gây ra trong quá trình di chuyển hay không (bỏ qua) hoặc sản xuất (thoát với lỗi). Điều này đưa chúng ta trở lại câu hỏi ban đầu của mình: Cách phát hiện di chuyển? –

+1

@MichaelKrupp xem https://stackoverflow.com/questions/1858230/how-to-detect-whether-my-rails-is-running-in-migration-or-not-in-environment-rb – bbozo

+0

@bbozo cảm ơn bạn ! Bây giờ tôi ít nhất có một workaround. Mặc dù tôi có thể tưởng tượng chạy vào tất cả các loại trường hợp cạnh tranh vui nhộn với điều này, như một số người khác đã nhận xét trên trang web bạn đã liên kết. –

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