Article:
Sống trên bờ vực Rails - Live on EdgeRails
1321
ngocdaothanh.myopenid.com 172Updated over 3 years ago |
Cài Rails bằng gem là cách thuận tiện và an toàn. Nhưng nếu những người tham gia project đều có có khả năng học hỏi nhanh, nắm bắt được những tính năng thuận tiện mới nhất của công nghệ, thì nên dùng EdgeRails trong quá trình phát triển project.
EdgeRails là một thuật ngữ để chỉ việc chạy một bản local copy của một phiên bản Rails đang được phát triển (bleeding edge). Nó là một giải pháp hay hơn so với chuẩn GemRails, để chỉ ra rằng bạn đang chạy trên một phiên bản Rails ổn định (hệ thống đóng gói GEM).
Lợi thế của EdgeRails là bạn có thể sử dụng những tính năng mới nhất hoặc những miếng vá lỗi chưa có trên phiên bản Rails ổn định mới nhất. Cũng như EdgeRails cho phép bạn chạy trên máy tính mà không cần cài đặt Rails. Hoặc bạn cũng có thể chạy EdgeRails trên một máy chủ chung (xem RailsWebHost) mà có thể đã có một phiên bản Rails chuyên nghiệp đã được cài đặt trên hệ thống, nhưng không phải EdgeRails.
Điều bất lợi rất lớn ở đây là các phiên bản đang phát triển chưa chắc đã được lưu tâm để phát triển thành phiên bản ổn định. Vậy đó là một sự đánh đổi.
Trong lệnh sử dụng EdgeRails, bạn đơn giản chỉ cần nhúng một phiên bản Rails (đang phát triển) bên trong ứng dụng của bạn hơn là sử dụng các thư viện trong phiên bản đã được cài đặt trên máy của bạn. Theo cách này, một lập trình viên làm việc trên nhiều ứng dụng Rails khác nhau có thể có vài phiên bản running off của GemRails và các phiên bản running off khác nhau của EdgeRails, và mỗi ứng dụng thì có riêng một phiên bản Rails được nhúng bên trong chúng.
Để nhúng một phiên bản Rails vào trong ứng dụng của bạn, các file liên quan phải được copy vào thư mục vendor/rails.
Cách dễ
Đơn giản là sử dụng dòng lệnh này từ trong thư mục chủ của ứng dụng của bạn để mở gói bản EdgeRails mới nhất vào trong thư mục vendor/rails của ứng dụng của bạn.
rake rails:freeze:edge
Việc này sẽ nhúng Rails framework vào trong ứng dụng của bạn bằng cách sử dụng Subversion (svn) để copy các file từ kho chứa mã nguồn đang phát triển (dev.rubyonrails.org) vào trong thư mục vendor/rails. Subversion là cần thiết cho dù bạn không sử dụng nó để quản lý mã nguồn của project của bạn.
Nếu bạn muốn chạy một phiên bản xác định của EdgeRails, thì bạn có thể gửi chúng vào trong dòng lệnh. Ví dụ dòng lệnh này sẽ nhúng phiên bản 1234 của Rails vào trong ứng dụng của bạn.
rake rails:freeze:edge REVISION=1234
Gợi ý: Thay vì bleeding edge, có thể bạn muốn đóng băng mã của phiên bản ổn định mới nhất. Bạn cũng muốn phải kiểm tra nó bên trong hệ thống điểu khiển nguồn của bạn, vì thế mà bạn có thể đưa cả hai trở về với nguồn ứng dụng của bạn như là một phiên bản Rails ổn định có thể làm việc được trong bất kỳ ngày tương lai nào. Ghé thăm http://dev.rubyonrails.org/browser/branches để tìm phiên bản ổn định cho mình. Rồi bạn có thể sử dụng dòng lệnh freeze_edge REVISION=#### để đóng băng nhánh ổn định vào trong ứng dụng của bạn.
Để trở lại GemRails, hãy thực thi lệnh:
rake rails:unfreeze
Dòng lệnh này sẽ làm rỗng thư mục vendor/rails.
Một tuỳ chọn thứ ba là thực thi dòng lệnh:
rake rails:freeze:gems
Dòng lệnh này sẽ copy GemRails vào thư mục vendor/rails. Có thể nó sẽ hữu dụng cho bạn nếu bạn không có các thư viện Rails đã được cài đặt trong hệ thống của bạn.
Theo dõi sự phát triển của Rails
Piston là một tiện ích cho phép dễ dàng quản lý vendor branch. Nó tương tự như svn:externals, trừ việc bạn có một bản local copy các file này, và bạn có thể tự chỉnh sửa nó sau này. Miễn những sự thay đổi là mergeable, bạn sẽ không gặp phải vấn đề gì cả. Vài pros quá tải trong svn:externals là vì bạn luôn luôn có mọi thứ trong kho chứa của mình, làm cho nó nhanh hơn để checkout và checkout tất cả nếu kho chứa Rails down vì một lý do nào đó.
Cài đặt:
$ gem install --include-dependencies piston
Successfully installed piston, version 1.0.0
Nếu bạn không muốn sử dụng piston, hoặc đang tìm những chỉ dẫn cũ hơn (không có piston), hãy xem phiên bản 164 của bài viết này.
Đầu tiên, bạn cần import vị trí của kho chứa remote:
$ piston import http://dev.rubyonrails.org/svn/rails/trunk vendor/rails
Exported r4720 from 'http://dev.rubyonrails.org/svn/rails/trunk' to 'vendor/rails'
$ svn commit -m "Importing local copy of Rails"
Khi bạn muốn lấy những thay đổi mới nhất từ kho chứa remote:
$ piston update vendor/rails
Updated 'vendor/rails' to r4720.
$ svn commit -m "Updates vendor/rails to the latest revision"
Bạn có thể ngăn ngừa một thư mục local quản lý Piston từ việc update bằng cách sử dụng lệnh con lock:
$ piston lock vendor/rails
'vendor/rails' locked at r4720.
Khi bạn lại muốn update trở lại, hãy unlock:
$ piston unlock vendor/rails
'vendor/rails' unlocked.
Bạn đã sử dụng svn:externals lần nào chưa? Đừng lo, nó dễ như cắt táo vậy. Chỉ cần làm theo các hướng dẫn ở đây.
Chuyển đổi giữa GemRails và EdgeRails
Nếu bạn đang sử dụng GemRails và muốn chuyển sang sử dụng EdgeRails, đầu tiên bạn cần setup svn:externals bằng cách sử dụng công nghệ bên trên. Bên cạnh đó, bạn cũng sẽ cần nâng cấp những file nhất định trong ứng dụng của bạn để tương thích với EdgeRails.
Có vài cách để làm việc này. Ý tưởng tổng quát nhất là biết những file nào cần phải nâng cấp.
Một cách để tìm những file này là sinh nó trong một ứng dụng EdgeRails tạm thời. Để làm việc này, tạo một thư mục tạm và làm việc sau (không được làm việc này trong thư mục ứng dụng của bạn):
$ ruby /path/to/project/vendor/rails/railties/bin/rails .
Việc này sẽ tạo một cây thư mục ứng dụng Rails mới. Hãy xem những file nào được tạo mới? Những cơ hội, chúng là những cái mà bạn cần để nâng cấp ứng dụng của bạn. Hãy chắc chắn rằng không quên merge bất cứ cơ hội nào của bạn, đặc biệt là application.rb, environment.rb, database.yml và những cái tương tự khác. Không cần kiểm tra các bản côy khác của Rails trong việc này.
Hỏi: Có cần thiết viết đè những file gems nếu bạn đang chạy edge bên trong thư mục vendor của bạn? Tôi nghĩ rằng Rails sẽ tìm trong vendor trước rồi chạy từ đó nếu nó tìm thấy Rails trong đó.
Trả lời: Rails sẽ chạy từ vendor/rails. Tuy nhiên, bạn cần phải cập nhật các file trong ứng dụng của bạn cho tương thích với EdgeRails. Giống như bạn phải cập nhật vài file trong ứng dụng của bạn khi nâng cấp từ 0.13 lên 1.0.
Ví dụ cho sự liên hệ này, script bên trong thư mục public/ cần phải được cập nhật để tương thích với EdgeRails, như 1.0 và revision 3595 là không tương thích. – Tai Rotbart.
Vấn đề của Rake br>/In case anyone is encountering a problem like ...
[duane@mail1 socialconference]$ rake -T
(in /home/www/socialconference)
rake aborted!
undefined method `namespace' for main:Object
./Rakefile:10
Hãy thử cập nhật rake thông qua
sudo gem update rake
Việc này sẽ giải quyết được vấn đề. – namxam? Hãy xem Going up
Mẹo nhỏ*
Nếu bạn gặp lỗi “no such file to load ...” thì có thể EdgeRails của bạn chỉ được cài đặt một phần, - xoá vendor/rails và bắt đầu lại.
edgerails rails
172
over 4 years ago
Updated over 3 years ago
Updated over 3 years ago
Updated over 3 years ago