2010-09-17 28 views
5

tôi đang làm việc trên tạo Rails đầu tiên của tôi 3 động cơ và Tôi hiện đang nhận được thông báo lỗi sauVấn đề tạo Rails Engine 3

is a Railtie/Engine and cannot be installed as plugin (RuntimeError) 

Để cung cấp cho bạn nhiều hơn một chút nền Tôi không làm Engine như một viên ngọc, nhưng tôi đã đặt các tệp Engine trong thư mục vendor/plugins. Tôi biết có sự cố khi tải trong thư mục plugin nhưng tôi không rõ cách giải quyết vấn đề.

ray My/file init.rb trong Engine có đoạn mã sau

require 'rails' 

module RailsApp 
    module MyEngine 
    class Engine < Rails::Engine 

     config.after_initialize do 
     RailsApp::GameType.register do |game_type| 
      game_type.name = "TreasureIsland" 
      game_type.version = "0.1" 
      game_type.thumbnail = "teasure_island.jpg" 
     end 
     end 
    end 
    end 
end 

Gợi ý?

+0

Tại sao chính xác được bạn cố gắng đặt công cụ trong nhà cung cấp/plugins? Lý do không phát triển nó như một viên ngọc là gì? Tại sao không chỉ phát triển như một viên ngọc? – johnmcaliley

+0

Tôi có thể làm theo cách đó. Không có lý do cụ thể nào mà tôi không làm theo cách đó, nhưng chỉ nghĩ rằng nó có nghĩa là làm việc theo cách nào đó? –

Trả lời

2

Tôi nghĩ rằng tôi nhớ đọc rằng Railties sẽ không hoạt động trong thư mục plugins, vì chúng được dự định sẽ được tải tại một điểm khác nhau trong quá trình khởi động ứng dụng. Tôi sẽ khuyên bạn nên tạo ra một viên ngọc bằng cách sử dụng một cái gì đó giống như Jeweler, mà làm rất nhiều công việc cho bạn. Mục đích của Railtie/Engine là có một thành phần có thể tái sử dụng có thể được bao gồm trong nhiều ứng dụng đường ray. Một khi bạn đã tạo ra một gem, bạn có thể trỏ đến đường dẫn gem cục bộ bên trong Gemfile của bạn. Điều này cho phép bạn xem những thay đổi trong mã động cơ của bạn bên trong ứng dụng đường ray của bạn mà không cần phải xây dựng và cài đặt lại đá quý mỗi khi bạn thực hiện thay đổi mã động cơ. Tất nhiên bạn sẽ muốn chỉ bó vào đá quý được cài đặt trong sản xuất. Tôi sẽ khuyên bạn nên đặt nó trên github và sử dụng URL đó trong Gemfile của bạn trong sản xuất.

Bundler địa phương ví dụ đá quý:

#Gemfile 
gem "my_engine", :require => "my_engine", :path => "/my_engines/my_engine" 

Kiểm tra trang web của Rubyist của Modern. Anh ấy có một loạt bài về việc tạo ra Railties và Engines. Có thể đã có một số thay đổi đối với Rails kể từ khi bài viết này được viết, nhưng tôi nghĩ phần lớn nó vẫn có liên quan. Nó đã giúp tôi ra một chút tốt khi tôi đã học cách viết Engines với Rails 3.

http://www.themodestrubyist.com/2010/03/01/rails-3-plugins---part-1---the-big-picture/
http://www.themodestrubyist.com/2010/03/05/rails-3-plugins---part-2---writing-an-engine/
http://www.themodestrubyist.com/2010/03/16/rails-3-plugins---part-3---rake-tasks-generators-initializers-oh-my/
http://www.themodestrubyist.com/2010/03/22/rails-3-plugins---part-4---more-on-generators/

2

John, tôi tin rằng động cơ (mà thường là đá quý) vs plugin (mà sống trong nhà cung cấp) được nạp tại các điểm khác nhau trong quá trình khởi tạo đường ray.

Động cơ thực sự linh hoạt hơn một chút, chúng có thể móc sâu hơn vào đường ray. Ngoài ra, bao bì dưới dạng đá quý có nhiều lợi thế: dễ chia sẻ hơn trên các ứng dụng, dễ bảo trì hơn trong mã repo riêng biệt, kiểm soát phiên bản dễ dàng hơn.

tôi là tạo ra động cơ ray đầu tiên của tôi ngay bây giờ và tạo ra một điểm khởi đầu hữu ích và đi bộ qua cho việc bắt đầu:

http://keithschacht.com/creating-a-rails-3-engine-plugin-gem/

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