2010-09-21 25 views
5

Tôi đang xây dựng một CMS đơn giản trên Rails và tôi đang nghĩ về cách tôi có thể gói nó để tôi có thể dễ dàng sử dụng lại nó trong các dự án khác và cuối cùng chia sẻ nó như là nguồn mở.Để đá quý hay không, đó là câu hỏi

Điều này khiến tôi tự hỏi liệu có thể đóng gói nó như một viên ngọc, với các khung nhìn, bộ điều khiển, mô hình, hình ảnh, biểu định kiểu, vv và sau đó chỉ đưa nó vào một trang mới đơn giản bằng cách thêm đá quý vào Gemfile?

Tôi không biết liệu điều này có khả thi hay không nhưng có thể ai đó ở đây có thể giúp tôi tìm hiểu?

Trả lời

4

Động cơ thật tuyệt vời !! Chắc chắn nhìn vào liên kết Jamie được cung cấp trong câu trả lời của mình .. đó là một điểm khởi đầu tốt. Động cơ là cách để đi với Rails 3. Tôi cảm thấy rằng nó là một trong những tính năng mạnh mẽ nhất của khung công tác, và tôi đã chuyển đổi hầu hết các chức năng phổ biến trong ứng dụng của tôi thành công cụ. CNTT giúp bạn tiết kiệm rất nhiều thời gian nếu bạn đang tạo nhiều ứng dụng. Đây là luồng công việc hiện tại của tôi khi tạo công cụ:

Bước 1:gem install jeweler nếu bạn không có. Sau đó tạo ra một viên đá quý trống bằng cách sử dụng jeweler.

Bước 2: cập nhật Rakefile được cung cấp bởi thợ kim hoàn với thông tin đá quý của bạn và bất kỳ phụ thuộc nào. Bạn có thể cần phải thêm một filelist để gemspec có thể trỏ đến các tập tin chính xác, và loại trừ bất kỳ tập tin bạn không muốn khi bạn xây dựng nó.

gem.files = FileList['lib/**/*.rb','[A-Z]*', 'lib/**/**/*'].to_a 

Bước 3: Thêm cấu trúc của bạn Rails ứng dụng - app/controllers, app/views, vv .. vào thư mục cấp cao nhất trong các đá quý. Bạn cũng có thể bao gồm/config thư mục cho routes.rb của bạn sẽ được nối vào các tuyến ứng dụng chính của bạn.

Bước 4: Thiết lập thư mục lib của bạn như thế này:

/lib/your_engine_name.rb (yêu cầu engine.rb trong tập tin này và bất kỳ file khác trong lib mà bạn cần) /lib/your_engine_name/
/lib/your_engine_name/engine.rb

Bước 5: Thêm mã để engine.rb:

require 'your_engine_name' 
require 'rails' 

module YourEngineName  
    class Engine < Rails::Engine 
    #load rake tasks go here 
    #initializers go here  
    end 
end 

Bước 6: Thêm tất cả các mã động cơ tùy chỉnh của bạn để ứng dụng/* và lib/your_engine_name/

Bước 7: Xây dựng viên ngọc sử dụng "cào xây dựng".Bạn phải làm điều này để Bundler có thể xem các tệp của bạn trong gemspec (được tạo khi bạn xây dựng) ở bướC# 8

Bước 8: Để tham chiếu thử nghiệm cục bộ trong Gemfile của ứng dụng chính nơi bạn muốn bao gồm động cơ:

#Gemfile 
gem "your_engine_name", :require => "your_engine_name", :path => "/your_engines/your_engine_name" 

Bước 9: bó cài đặt và khởi động máy chủ ứng dụng tại địa phương.

Bước 10: Vì bạn đang tham khảo các đường địa phương, bạn có thể thay đổi các đá quý và xem chúng trong ứng dụng chính của bạn mà không cần xây dựng lại (trừ khi bạn cần thêm các tập tin mới cho gemspec)

Bước 11: đặt nguồn đá quý vào github để bạn có thể sử dụng nó trong sản phẩm. Làm cho việc sử dụng các công việc trang sức rake. Tôi kết hợp một số nhiệm vụ cào như thế này để làm git push và thẻ trong các bước tương tự và bao gồm chúng trong Rakefile của động cơ:

namespace :version do 
    desc "create a new version, create tag and push to github" 
    task :github_and_tag do 
    Rake::Task['github:release'].invoke 
    Rake::Task['git:release'].invoke 
    end 

    desc "bump patch push to github" 
    task :patch_release do 
    Rake::Task['version:bump:patch'].invoke 
    Rake::Task['version:github_and_tag'].invoke 
    end 

    desc "bump minor push to github" 
    task :minor_release do 
    Rake::Task['version:bump:minor'].invoke 
    Rake::Task['version:github_and_tag'].invoke 
    end 

    desc "bump major push to github" 
    task :major_release do 
    Rake::Task['version:bump:major'].invoke 
    Rake::Task['version:github_and_tag'].invoke 
    end 
end 

Bước 12: Khi triển khai vào sản xuất, thay đổi nguồn trong Gemfile để GitHub và tham khảo một thẻ phiên bản:

gem 'your_engine_name', :git => '[email protected]:yourusername/your_engine_name.git', :tag=>"v1.1.1" 

tôi đang sử dụng hack này để tham khảo 2 nguồn đá quý trong Gemfile cho đến khi họ thêm tính năng đó để Bundler: http://www.cowboycoded.com/2010/08/10/using-2-sources-for-a-gem-in-different-environments-with-bundler/

Hãy cho tôi biết nếu bạn có bất kỳ vấn đề với điều này. Tôi đang làm việc trên một bài đăng trên blog để hiển thị điều này chi tiết hơn và tôi có thể đã bỏ sót một vài điều .. chỉ cần viết điều này ra khỏi đầu của tôi ngay bây giờ ..

+0

Cảm ơn LOT cho câu trả lời này và thời gian bạn đưa vào nó! Tuyệt vời! – Erik

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