Tại sao bạn nên chuyển sang Ruby và Rails. Viên ngọc trên tay vịn. Những bước đầu tiên

Xin chào. Tôi đã sử dụng Rails trong một khoảng thời gian đáng kể - 5 năm (theo quan điểm của tôi, điều đó rất quan trọng). Trong bài viết này, tôi sẽ cố gắng tóm tắt kinh nghiệm của mình và trả lời câu hỏi: tại sao tôi vẫn sử dụng Rails và tại sao bạn nên (hoặc không nên) sử dụng nó.

Đầu tiên, hãy trả lời câu hỏi từ tiêu đề. Rails có thực sự phổ biến hiện nay vào giữa năm 2015 không?

Bảng so sánh hài hước này dựa trên mức độ phổ biến của kho lưu trữ trên GitHub và số lượng câu hỏi trên StackOverflow (https://hotframeworks.com/) cho biết Rails vẫn đứng đầu:

hạng khách hàng< ActiveRecord :: Base has_many :orders end class Order < ActiveRecord :: Base belongs_to :customer end

Và đó là tất cả. Điều này hoạt động mà không cần một dòng cấu hình. Theo mặc định, giả định rằng bạn có bảng đơn hàng và khách hàng trong cơ sở dữ liệu của mình. Trong đơn đặt hàng có khóa ngoàiđược đặt tên là customer_id. Khóa chính được gọi là id. Đó là tất cả. Bạn tuân theo các quy ước đặt tên và mọi thứ đều tự hoạt động. Bây giờ bạn có thể xây dựng và thực hiện các truy vấn SQL một cách hoàn toàn rõ ràng và tự nhiên:

khách hàng . đơn hàng #=> đơn hàng . khách hàng #=>khách hàng

Được rồi, hãy tiếp tục. Yêu cầu định tuyến (tuyến đường). Thật đáng kinh ngạc. Bạn có thể làm mọi thứ và rất nhiều thứ “mọi thứ” này đều miễn phí. Nhưng đây là nếu bạn được hướng dẫn bởi các thỏa thuận. Tuyến đường ví dụ từ tài liệu

tài nguyên: sách

Nhờ vào sự kỳ diệu của Rails, một dòng đơn giản này có thể tạo ra một loạt các tuyến CRUD:

$ tuyến đường cào thực thi | cuốn sách grep books GET /books(.:format) books#index POST /books(.:format) books#create new_book NHẬN /books/new(.:format) books#new edit_book NHẬN /books/:id/edit(.:format) books#edit sách GET /books/:id(.:format) books#show PATCH /books/:id(.:format) books#update PUT /books/:id(.:format) books#update XÓA /books/:id(.:format) books#destroy

Một lần nữa, bằng cách đặt tên theo quy ước, bạn nên có một lớp BooksController và các phương thức lập chỉ mục/tạo tương tự bên trong nó, tức là. books#index tương ứng với BooksController#index . Thêm vào đây những hạn chế (ràng buộc), không gian tên (không gian tên), mô-đun (mô-đun).

Các biểu mẫu HTML. Những gì có thể được cải thiện ở đây? HTML là html, bạn không thể thoát khỏi nó nhưng bạn có thể cố gắng giảm bớt nỗi đau. Một ví dụ về tạo biểu mẫu từ tài liệu:

<%= form_for @article, url: {action: "create"}, html: {class: "nifty_form"} do |f| %> <%= f.text_field:title %> <%= f.text_area:body, size: "60x12" %> <%= f.submit "Create" %> <% end %>

Giả định rằng @article là một mô hình ActiveRecord, nhưng trên thực tế có thể có bất kỳ đối tượng tùy ý nào. Bao gồm, nếu bạn sử dụng mẫu FormObject, có thể có một đối tượng hoàn toàn không liên quan đến lớp ORM.

Di chuyển cơ sở dữ liệu. Mọi thứ đều đạt tiêu chuẩn ở đây. Điều đó là có thể, đơn giản và nhanh chóng.

Xác thực người dùng và chức năng liên quan - đăng ký, đăng nhập, đăng xuất, khôi phục mật khẩu. Để làm việc này, bạn cần sử dụng một trong một số thư viện có sẵn: Devise, Authlogic, v.v. Bạn chỉ cần thêm một vài đường tiêu chuẩn để kết nối.

Triển khai ứng dụng lên máy chủ. Ăn giải pháp chuẩn- capistrano. Ví dụ về tập lệnh chuẩn có nhận xét: (liên kết đến ý chính).

# config/triển khai.rb # config chỉ hợp lệ cho phiên bản hiện tại của Capistrano khóa "3.4.0" bộ :application , bộ "aircat" :repo_url , "[email được bảo vệ]:applabsservice/aircat.git" set :deploy_to , "/var/www/apps/aircat" set :git_shallow_clone , 1 set :deploy_via , :copy set :branch , "master" set :host , "127.0.0.1" set :user , "deploy" role : ứng dụng , %w( [email được bảo vệ]) vai trò :web , %w( [email được bảo vệ]) vai trò :db , %w( [email được bảo vệ]) không gian tên :db do desc Nhiệm vụ "Tạo liên kết tượng trưng" :symlink thực hiện trên các vai trò (:app ) thực thi "ln -nfs #(shared_path ) /config/database.yml #(release_path ) /config/database.yml" end end end sau "triển khai:cập nhật", "db:symlink" # theo sau là các cuộc gọi lại khác" và khởi động lại máy chủ web

Điều này mang lại điều gì? Với mỗi lần triển khai, một phiên bản mới của ứng dụng sẽ được sao chép vào một thư mục phát hành riêng, bên cạnh các phiên bản trước đó. Quá trình di chuyển được khởi chạy, các tệp css/js tĩnh được biên dịch/dán/rút gọn và khi mọi thứ đã sẵn sàng, máy chủ web sẽ chuyển sang thư mục có bản phát hành mới. Nếu bạn mắc lỗi ở bất kỳ bước nào, bạn chỉ cần quay lại bản phát hành trước đó. Mã mới chạy trên cơ sở dữ liệu được cập nhật. Có một sắc thái là trong quá trình di chuyển, mã cũ sẽ hoạt động trong một thời gian với cơ sở dữ liệu được cập nhật. Nhưng điều này cũng đang được giải quyết.

lớp bài viết< ActiveRecord :: Base has_attached_file :image , styles : { standard : "1280x1280>" ), default_url : "/images/:style/missing.png" xác thực_attachment_content_type:image , content_type : /\Aimage\/.*\Z/ has_attached_file :kết thúc video

Và đó là tất cả. Bạn có thể tự động tạo di chuyển để lưu siêu dữ liệu tệp trong cơ sở dữ liệu và nó đã hoạt động:

bưu kiện . hình ảnh = Tệp . đọc bài đăng ("test.jpeg" ). cứu

Thế là xong, tập tin đã được đặt vào đúng thư mục trên đĩa. Nếu đây là một bức ảnh, nó có thể được cắt, chuyển đổi, nén. Thực hiện một số tùy chọn độ phân giải với một vài dòng ma thuật.

Bản địa hóa - vâng, giống như những người khác, mọi thứ đều đơn giản và tiêu chuẩn.

Đang thử nghiệm. TRONG thư viện chuẩn Ruby là một khung thử nghiệm đơn vị. Rails có hỗ trợ ngay lập tức cho các thử nghiệm chức năng và tích hợp, nhưng sẽ thú vị hơn nhiều khi sử dụng kết hợp RSpec cho các thử nghiệm đơn vị và Capybara + webdriver cho các thử nghiệm tích hợp. Hãy tưởng tượng - bạn có thể chạy một trình duyệt thực được cài đặt trên hệ thống (ví dụ: thông qua Selenium Webdriver) hoặc một trình duyệt không có giao diện người dùng dựa trên WebKit trong các thử nghiệm tích hợp. Tùy chọn thứ hai đáng tin cậy hơn, ổn định hơn và nhanh hơn.

Những bất lợi cho sự phát triển bao gồm:

  • Rails cung cấp cho bạn các quy ước. Bạn theo dõi họ. Code của bạn ngắn gọn, đẹp mắt, bao gồm các bài kiểm tra, mọi thứ đều được thực hiện theo Rails-way. Nhưng cũng có một nhược điểm. Bạn nhận được nhiều khớp nối thành phần hơn, bộ điều khiển dày hơn hoặc mô hình dày hơn. Rails cung cấp một mẫu MVC nhưng không có gì hơn thế. Không có lớp trừu tượng tiêu chuẩn - quyết định rơi vào vai bạn. Nếu bạn nhận thấy rằng các thành phần tiêu chuẩn (khung nhìn, mô hình, bộ điều khiển) đã quá bão hòa với logic mà chúng không bình thường thì bạn phải làm gì đó. Lựa chọn của bạn là gì? Bạn có thể bắt đầu tái cấu trúc, di chuyển logic thành các lớp riêng biệt - rất nhiều điều đã được viết về vấn đề này. Bạn có thể sử dụng các đối tượng Biểu mẫu, di chuyển SQL phức tạp thành các đối tượng độc lập và tách logic nghiệp vụ khỏi ORM/bộ điều khiển.
  • Tài liệu về Rails và các thư viện phổ biến rất tuyệt vời, nhưng nó vẫn không giúp bạn tiết kiệm được thời gian nghiên cứu mã nguồn của chúng để tìm ra những gì còn thiếu trong tài liệu. Đôi khi mã sẽ nói nhiều hơn nữa.
  • Tốc độ phát triển của các công cụ và thư viện có một nhược điểm rõ ràng - bạn sẽ phải cập nhật định kỳ lên các phiên bản mới nhất. Điều này áp dụng cho cả phiên bản và thư viện Rails. Việc chuyển sang phiên bản chính khác của thư viện để thử nghiệm có thể mất hơn một hoặc hai ngày. Có thể có tùy chọn khi một số thư viện tương tự thành công mà bạn sử dụng xuất hiện. Thư viện của bạn dần dần không còn được phát triển và hỗ trợ, và đột nhiên bạn phát hiện ra rằng nó không hoạt động trong phiên bản Rails tiếp theo và bạn sẽ phải chuyển sang các phiên bản tương tự. Không có điều nào trong số này dành riêng cho Rails, nhưng trong một dự án tồn tại lâu dài, bạn có thể gặp phải nó.

Khi nào bạn cần Rails?

  • Bạn đang phát triển một ứng dụng web thông thường. Bạn mong đợi dự án sẽ tồn tại lâu dài. Bạn cần công cụ để tiếp tục phát triển và tồn tại, bạn cần sự hỗ trợ từ cộng đồng hoặc từ một số công ty, cơ hội thuê một chuyên gia. Trong trường hợp đó, Rails là một lựa chọn tuyệt vời. Có rất nhiều lựa chọn thay thế để lựa chọn. Nhưng bạn vẫn sẽ chọn Rails, vì nó vẫn còn thời thượng ;-)
  • Bạn giả định những thay đổi liên tục về yêu cầu và chức năng, phương hướng phát triển dự án. Bạn không có một khái niệm sản phẩm cố định, nó thay đổi và phụ thuộc vào nhận xét với người dùng. Rails là một lựa chọn tuyệt vời trong trường hợp này.
  • Bạn cần “tạo mẫu nhanh”. Rails vẫn tốt cho việc này. Tất nhiên, có những lựa chọn thay thế, nhưng Rails cũng rất giỏi trong lĩnh vực này.

Khi nào bạn không cần Rails?

  • Bạn hiểu rõ các yêu cầu đối với dự án và chức năng. Bạn không mong đợi Thay đổi nhanh chức năng. Ví dụ: bạn đã có một nguyên mẫu hoặc bạn đã làm một cái gì đó rất giống và có thể đúc ngay kiến ​​trúc bằng đồng.
  • Bạn đang tìm kiếm thứ mà bạn sẽ không bao giờ tìm thấy bằng ngôn ngữ được gõ động - tốc độ cao (cao nhất) và mức tiêu thụ tài nguyên máy chủ thấp.
  • Bạn đã có một đội ngũ chuyên gia muốn sử dụng một khuôn khổ khác.

Được rồi, mọi chuyện đã kết thúc rồi. Cuối cùng, tôi sẽ nói thêm rằng tôi rất thích thú khi sử dụng Rails và Ruby. Cái này rất công cụ tiện lợi, mềm và dẻo như nhựa. Trong bàn tay khéo léo, họ giúp tạo ra những điều kỳ diệu.

Alexey Dmitriev: Xin chào. Tên tôi là Alexey Dmitriev và tôi đã phát triển web được 7 năm. Lúc đầu, tôi viết bằng PHP và Perl, sau đó tôi chuyển sang Ruby, thứ mà tôi đã sử dụng trong 4 năm qua.

Ruby on Rails là gì? Đây là một framework mã nguồn mở mã nguồn. Nó đã tồn tại được một thời gian. Có 8 nhà phát triển đang hoạt động cùng với một cộng đồng lớn. TRONG tổng cộng 300-400 người tham gia phát triển Rails.

Các chuyên gia tạo các bản vá và viết plugin. Sự phát triển được sử dụng trong Rails Core. Cuối cùng, cộng đồng toàn cầu thích làm việc với khuôn khổ này.

Hệ tư tưởng Rails

Hệ tư tưởng của Rails rất đơn giản. Khung này chủ yếu dành cho các nhà phát triển, nhằm mục đích phát triển các dự án web. Những thứ kia. máy chủ, máy móc, thiết bị rất tuyệt vời nhưng framework lại tập trung vào nhu cầu của nhà phát triển. Cái này là của anh ta sự khác biệt cơ bản từ Java. Các chuyên gia đến với cộng đồng Ruby và Rails chủ yếu từ Java.

Có quan niệm cho rằng cấu hình không phải là sự lựa chọn của chúng tôi. Trong môi trường Rails và các dự án Rails, quy ước luôn chiếm ưu thế hơn về cấu hình. Tất nhiên bạn có thể tạo ra một cấu hình cụ thể. Nhưng để bắt đầu phát triển, bạn không cần phải tạo tập tin dài cấu hình. Nhiều thứ đã tồn tại ở dạng làm sẵn. Từ đó bạn có thể chọn những gì bạn cần cho công việc tiếp theo.

Tất cả các dự án Rails đều có cấu trúc giống nhau. Khi làm việc trên một dự án mới, bạn biết trước vị trí của nó là gì: mô hình, mẫu, thư viện và plugin. Rails được xây dựng trên thiết kế MVC (Model-View-Controller). Logic dự án được chia thành ba lớp.

Trong Rails, mọi thứ đều phải được kiểm tra. Nếu bạn cố gắng xuất bản một plugin, tiện ích mở rộng hoặc dự án nguồn mở phần mềm, bạn có thể sẽ không thành công trừ khi thực hiện thử nghiệm rộng rãi.

Điểm mạnh chính của Ruby on Rails nằm ở ngôn ngữ được viết. Ruby là ngôn ngữ kịch bản, được thực thi tại thời điểm yêu cầu và không yêu cầu biên dịch.

Nó cũng là một ngôn ngữ hướng đối tượng (như Java hoặc C#). Bất kỳ thực thể nào bên trong Ruby đều là một đối tượng, có thể là chuỗi, số, lớp hoặc mô-đun.

Gõ bằng Ruby rất năng động. Không cần thiết phải chỉ định loại thuộc tính để gọi phương thức. Tất cả các biến thường bằng nhau. Bạn quyết định những gì bạn làm việc với.

Ruby có một tập hợp các mô-đun được xác định. Đây là chức năng được trừu tượng hóa từ các lớp mà nó được định nghĩa. Có các lớp đặc biệt - mô-đun - trong đó chức năng được chỉ định có thể được kết nối với bất kỳ lớp nào.

Ví dụ: bạn có thể thêm một phương thức mới vào lớp “chuỗi”. Điều tương tự cũng áp dụng cho lớp “sách”. Chúng sẽ hoạt động giống nhau (những thứ khác bằng nhau) vì các phương thức giống nhau được xác định.

Đối với ngôn ngữ Ruby có rất một số lượng lớn triển khai. Trên thực tế, Ruby đang dần thích nghi với mọi máy ảo. Giờ đây nó có thể được phân phối dưới dạng một sản phẩm độc lập hoặc một phương ngữ cho máy Java. Tôi hy vọng nó sẽ sớm có thể sử dụng nó trên nền tảng DotNet (IronRuby).

Ngôn ngữ này đã được sử dụng theo mặc định trong phiên bản Mac OS mới (dưới dạng MacRuby) và cũng được chuyển sang máy ảo Smalltalk và Sub. Chúng tôi hy vọng rằng Rails cũng sẽ có mặt ở mọi nơi.

Khung Rails là mô hình, bộ điều khiển của nó. Các mô hình được đại diện bởi khung. Rails không phải là một framework duy nhất mà là một tập hợp của chúng. Mỗi người trong số họ chịu trách nhiệm về một phần cụ thể của dự án.

Mô hình được thể hiện bằng khung ActiveRecord. Nó cũng có thể được sử dụng bên ngoài Rails (ví dụ: để làm việc với cơ sở dữ liệu). Đây là một ánh xạ quan hệ đối tượng (ORM). ActiveRecord hỗ trợ MySQL, PostgreSQL và SQLite.

ActiveRecord có thể được sử dụng bởi cơ sở dữ liệu cấp cao. Đồng thời, một số plugin đã được viết cho ActiveRecord để hỗ trợ cơ sở dữ liệu độc quyền: Oracle, Microsoft SQL Máy chủ và DB2.

ActiveRecord cung cấp khả năng xác định mối quan hệ giữa các mô hình khác nhau trong dự án thông qua các liên kết được xác định. Mối quan hệ một-nhiều, nhiều-nhiều và đa hình (khi các đối tượng kết nối với nhau “không biết” chúng có lớp kết nối nào).

Tất cả các kết nối đều có thể mở rộng. Giả sử rằng bên trong kết nối đầu tiên, chúng ta có thể thiết lập một số phương thức và bên trong kết nối thứ hai - những phương thức khác. Cũng có thể sử dụng các mô-đun để mở rộng chức năng.

ActiveRecord được sử dụng để lấy dữ liệu từ cơ sở dữ liệu (không giống như nhiều khung có sẵn trên thị trường). Bạn không cần biết SQL để làm việc với cơ sở dữ liệu.

Nói chung, trong thế giới Rails, người ta tin rằng nếu bạn viết bằng SQL, thì bạn sẽ không biết mình đang làm gì hoặc bạn biết chắc chắn, nhưng sau đó bạn đơn giản là không thể làm theo cách nào khác. Trong tất cả các trường hợp khác, bạn có thể thực hiện bằng các phương thức ActiveRecord. Điều này thường hợp lý hơn vì nó cho phép bạn tạo nhiều thứ khác nhau (ví dụ: thêm nhanh các bộ lọc tùy theo điều kiện mà không cần lo lắng về việc tạo SQL).

ActiveRecord cung cấp khả năng bảo vệ chống lại việc tiêm SQL khi tìm kiếm. Nếu bạn không trực tiếp "gắn" các tham số vào yêu cầu mà sử dụng các điều kiện => tên => 'Google' và sử dụng các tham số nhận được từ người dùng, thì theo mặc định, tính năng bảo vệ chống lại việc tiêm SQL sẽ được cung cấp.

ActiveRecord cung cấp chức năng xác thực dữ liệu nhận được từ người dùng. Bạn có thể mô tả trước những quy tắc mà dữ liệu sẽ được kiểm tra. Các quy tắc liên quan đến các chi tiết cụ thể về sự hiện diện của dữ liệu, thiết kế, phạm vi và định dạng của nó.

Tùy thuộc vào các điều kiện để tạo đối tượng, bạn có thể tạo một số xác thực và khi cập nhật - những xác nhận hoàn toàn khác nhau. Ngoài ra, bạn có thể sử dụng cả bộ xác thực tiêu chuẩn và bộ xác thực của riêng bạn.

Phiên bản thứ ba của Rails sắp ra mắt. Chúng tôi đã chờ đợi cô ấy hơn một năm. Trong đó, ActiveRecord sẽ được chia thành nhiều phần nữa và ActiveModel sẽ xuất hiện - Giao diện lập trình ứng dụng hợp nhất cho các kho lưu trữ. Việc hạn chế sử dụng cơ sở dữ liệu quan hệ sẽ được dỡ bỏ.

Có thể sử dụng cơ sở dữ liệu không phải SQL (MongoDB, Cassandra), Redis làm bộ lưu trữ và tạo trình điều khiển của riêng bạn để lưu trữ.

Đặc biệt, ActiveModel sẽ được sử dụng để làm việc với các tài nguyên bên ngoài thông qua HTTP.

sẽ xuất hiện Ngôn ngữ mới mẫu.

Những công trình kiến ​​trúc lớn như vậy. Và bây giờ nó trông như thế nào.

Ngôn ngữ Ruby đã trở nên mạnh mẽ hơn.

Phần tiếp theo của cuộc nói chuyện liên quan đến bộ điều khiển. Trước hết cần đề cập đến chủ đề định tuyến. Khi người dùng truy cập vào một địa chỉ nhất định trên mạng, bộ điều phối sẽ chấp nhận yêu cầu và sử dụng phương pháp thích hợp để chuyển tiếp nó đến bộ điều khiển thích hợp.

Hơn nữa, Rails đã tích hợp sẵn tính năng truyền tải các biểu diễn trạng thái (REST). Tùy thuộc vào phương thức HTTP được sử dụng, các phương thức khác nhau sẽ được áp dụng bên trong bộ điều khiển.

Vẫn còn những phương thức khác trong Rails cung cấp khả năng chuyển hướng các phương thức khác nhau tới các bộ điều khiển khác nhau. Điều này rất thuận tiện vì bạn chỉ cần đưa ra yêu cầu theo cách chính xác. Sau khi hình thành nó, bạn sẽ biết về vị trí hướng của nó. Bạn không cần phải tạo một loạt các URL khác nhau nữa. Điều này thuận tiện khi phát triển giao diện lập trình ứng dụng (API).

Tiếp theo là các bộ lọc. Bộ điều khiển cung cấp khả năng xử lý trước và sau một yêu cầu. Yêu cầu đến sẽ được gửi đến bộ lọc, nơi có thể kiểm tra xem người dùng có được ủy quyền hay không, v.v. Kết quả thu được có thể được xử lý, có thể thêm cookie và phản hồi. Logic xử lý yêu cầu có thể được tách ra.

Bộ điều khiển hỗ trợ phản hồi ở các định dạng khác nhau. Cùng một phương pháp có thể phản hồi khác nhau đối với các yêu cầu khác nhau. Nói một cách đại khái, nếu bạn đưa ra yêu cầu tới một URL cụ thể từ trình duyệt, bạn sẽ nhận được HTML. Nếu bạn tạo một yêu cầu AJAX, bạn sẽ nhận được JSON.

Trong trường hợp này, logic hoạt động của bộ điều khiển được bảo toàn. Bạn không cần phải viết nhiều bộ điều khiển để xử lý các yêu cầu của iPhone hoặc iPad. Mọi thứ đều có thể được tạo ở một nơi.

Cái tiếp theo là View, tức là. mẫu, dạng xem, loại dữ liệu được trình bày. Rails cho phép bạn sử dụng các mẫu của riêng bạn. Mặc định là ERB (Ruby nhúng). Đây là HTML thông thường chứa các đoạn mã.

Nói chung, điều này không tệ, nhưng có những người hâm mộ các công cụ tạo mẫu khác, chẳng hạn như HAML. Đây là một công cụ tạo mẫu kiểu Zen mà bạn không cần phải viết thẻ đóng hoặc dấu ngoặc nhọn.

Có khoảng 20 công cụ tạo mẫu cho Rails phù hợp với mọi sở thích. Xem hỗ trợ các mẫu khác nhau cho các loại chính khác nhau.

Tùy thuộc vào loại yêu cầu, có thể đưa ra phản hồi thích hợp. Nếu yêu cầu được gửi từ một trang HTML, câu trả lời là một, nếu từ RSS, câu trả lời sẽ khác. Bạn thậm chí có thể phát hành các trang khác nhau sang các ngôn ngữ khác nhau. Tùy thuộc vào ngôn ngữ của người dùng, được phép trả về các mẫu khác nhau.

Rails có một số lượng lớn người trợ giúp, tức là. các phương pháp giúp định hình trang. Thay vì tạo mã theo cách thủ công, bạn có thể sử dụng trình trợ giúp. Có khá nhiều trong số chúng trong Rails.

Hãy đưa ra một ví dụ về cách tạo biểu mẫu bằng cách sử dụng trình trợ giúp form_for. Mô hình ActiveRecord đã được chuyển sang nó. Biểu mẫu tự động tạo các trường trong đó tên của trường đó và giá trị của nó từ mô hình được chèn vào.

Rails tạo ra một tập hợp các trợ giúp (trong trong trường hợp này- new_user_path), giúp hình thành URL của các trang tương ứng. Tức là, new_user_path chẳng hạn là URL của trang thêm người dùng.

Người trợ giúp được tuyển dụng theo các quy tắc của một tuyến đường nhất định. Ví dụ: nếu cần thay đổi đột ngột địa chỉ của trang chịu trách nhiệm đăng ký người dùng thì chỉ cần thay đổi quy tắc định tuyến là đủ. Không cần phải viết lại mã.

Rails sử dụng bộ nhớ đệm tích hợp. Bạn có thể sử dụng cơ chế Rails để lưu trữ kết quả truy vấn cho cả trang và các phần được truy cập thường xuyên của trang đó. Điều này là cần thiết để sau đó chèn dữ liệu mà không cần xử lý thêm.

Rails có hỗ trợ tích hợp cho việc bản địa hóa. Bạn có thể làm cho ứng dụng đa ngôn ngữ. Tùy thuộc vào yêu cầu của người dùng, có thể đưa ra phản hồi cho ngôn ngữ khác nhau. Điều này cũng đúng với bộ điều khiển. Quyền truy cập vào dữ liệu này được cung cấp ở hầu hết mọi nơi.

Sức mạnh thực sự của Rails là các phần mở rộng của nó. Tổng cộng, hơn 12 nghìn tiện ích mở rộng đã được viết cho Ruby và Rails: plugin, được gọi là Đá quý (các gói chức năng được đặt trong kho lưu trữ, từ đó có thể tải xuống, dễ dàng kết nối và sử dụng).

12 nghìn tiện ích mở rộng này cho phép bạn làm được rất nhiều việc. Đối với hầu hết mọi nhiệm vụ đã được giải quyết trong Rails bởi ít nhất 3 người trên hành tinh, rất có thể đã có plugin hoặc gem. Hầu hết tất cả các tác vụ thông thường đều được giải quyết bằng cách sử dụng plugin hoặc đá quý, có thể là ủy quyền hoặc đăng ký.

Một nhiệm vụ không điển hình là gì? Ví dụ: tính năng này đang hoạt động với Excel từ UX.

Đối với việc tìm kiếm tiện ích mở rộng, việc này chỉ có thể được thực hiện ở hai nơi. Trên GitHub (nơi chứa hầu hết các plugin) và RubyGems (nơi chứa hầu hết các loại đá quý).

Bundler gần đây đã được phát triển để chuẩn bị cho việc phát hành Rails 3. Đây là một công cụ để tạo ra sự phụ thuộc của dự án. Giả sử, nếu dự án của bạn sử dụng 10-20 loại đá quý khác nhau, bạn có thể chèn chúng vào hệ thống theo cách thủ công.

Phiên bản thứ ba của Rails được điều chỉnh tối đa để mở rộng. Nó bổ sung khá nhiều tính năng để mở rộng Rails.

Những cạm bẫy phổ biến khi di chuyển sang Rails là gì?

Sai lầm đầu tiên. Chúng tôi muốn viết bằng Ruby như PHP (hoặc Perl). Điều này là không thể chấp nhận được, bởi vì Các ngôn ngữ khá khác nhau - không phải về cú pháp mà là về cách tiếp cận chất lượng.

Ruby có nhiều hơn cấp độ cao yêu cầu chung về chất lượng công trình. Trang web Rails cung cấp các ví dụ về cách viết: demo, video, hướng dẫn, v.v.

Sai lầm thứ hai là việc phát minh ra xe đạp. Phát minh ra một cái gì đó mới là rất hữu ích. Nhưng tốt hơn hết trước tiên bạn nên kiểm tra 12 nghìn plugin và gem mà tôi đã đề cập. Vì vậy, tốt nhất nên tham khảo ý kiến ​​​​của chuyên gia về vấn đề bạn quan tâm, chẳng hạn như trên diễn đàn.

Sai lầm thứ ba là cho rằng Ruby là liều thuốc chữa bách bệnh. Cái này sai. Ruby khá nhiệm vụ cụ thể là việc tạo ra các dự án web. Việc xử lý video và đồ họa cũng như tạo ra các hệ thống đa luồng không thể thực hiện được trong Ruby.

Rails hoạt động rất tốt khi kết hợp với các dịch vụ khác. Đặc biệt, về mặt tìm kiếm (với Sphinx) hay xử lý hình ảnh (với ImageMagick).

Những lầm tưởng về Ruby on Rails

Có một số huyền thoại về Ruby on Rails được lan truyền bởi những người chưa bao giờ làm việc với nó.

Chuyện lầm tưởng 1 - Rails chậm hơn các ngôn ngữ khác

Có lẽ. Nhưng câu hỏi đặt ra là làm thế nào để đo tốc độ.

tồn tại bộ cụ thể các bài kiểm tra tổng hợp đo tốc độ của ngôn ngữ lập trình khi giải quyết một vấn đề điển hình. Nhưng phần lớn các bài kiểm tra tổng hợp đều đo tốc độ trừu tượng.

Rails đủ nhanh để giải quyết nhiệm vụ cần thiết. Ví dụ: bạn cần cung cấp cho một người một hình ảnh hoặc trang. Cho dù nó sẽ được tạo trong 50 mili giây hay 70 mili giây - không có sự khác biệt cơ bản.

Rails khá đủ để hỗ trợ các dự án trên một máy chủ có sự tham gia của hàng trăm nghìn người dùng mỗi ngày và nhận được hàng triệu lượt xem. Việc này được thực hiện như thế nào?

Tốc độ của đoàn lữ hành được xác định bởi tốc độ của con lạc đà chậm nhất. Tại tải cao lạc đà chậm nhất là lạc đà chứa đồ. Đây là cơ sở dữ liệu, một hệ thống tệp - đó là những gì mà bất kỳ dự án nào cũng gặp phải.

Cách dễ nhất để tăng tốc Rails là tăng tốc những gì ngôn ngữ đó làm việc. Cần tối ưu hóa cơ sở dữ liệu và truy vấn mạng nếu có.

Cũng cần phải thực hiện lưu vào bộ nhớ đệm - khi mọi thứ “rơi”. Trước đây, nó không có ý nghĩa.

Bạn cần nhớ về lỗi phổ biến số 3 (Rails không phải là viên đạn bạc, tức là không phải là thuốc chữa bách bệnh). Đối với những nơi đặc biệt nhạy cảm với tốc độ thấp, việc sử dụng ngôn ngữ nhanh hơn là điều hợp lý. Có lẽ là "C". May mắn thay, bạn có thể viết phần mở rộng cho Ruby trên đó. Bản thân Ruby được viết bằng "C".

Ngoài ra, bạn có thể sử dụng các ngôn ngữ tuyệt vời như Perl, Java, C#. Nếu lưu lượng truy cập vào dự án của bạn đạt 10 nghìn và một tiện ích nhất định từ dự án nhận được 200 triệu lượt xem mỗi ngày thì tốt hơn là bạn nên viết nó bằng Perl. Nhưng tôi không thấy có ích gì khi viết toàn bộ dự án trong Perl chỉ cho một tiện ích.

Chuyện lầm tưởng số 2: Rails không mở rộng quy mô

Các chuyên gia trong lĩnh vực sản xuất, những người có một cụm bắt đầu từ hàng trăm máy chủ, rất thích nói điều này.

“Rails” mở rộng quy mô rất tốt chỉ bằng cách thêm máy chủ, nhưng chúng gặp phải vấn đề về lưu trữ. Cuối cùng, vấn đề là mở rộng quy mô cơ sở dữ liệu, hệ thống tập tin và như thế. Đã tồn tại những dịch vụ có thể giải quyết thành công nhiệm vụ này.

Huyền thoại thứ ba là chi phí lưu trữ đắt đỏ.

Lưu trữ có giá $ 19,95 mỗi tháng. Tức là chỉ cần trả 585 rúp để “huấn luyện” một dự án Rails thông thường là đủ. Thời gian của lập trình viên đắt hơn so với việc lưu trữ. Bạn có thể tiết kiệm đến mức có đủ tiền cho ba dịch vụ lưu trữ như vậy.

Khi nào thì thích hợp để sử dụng Ruby?

Khi phát triển nguyên mẫu cho các dự án nội bộ và web yêu cầu chức năng độc đáo, trong đó CMS hoặc Bitrix tiêu chuẩn sẽ không trợ giúp được. Ngoài ra, ngôn ngữ này thuận tiện để sử dụng nếu yếu tố như tốc độ phát triển là quan trọng.

Đã khoảng một năm kể từ khi Ruby on Rails ra mắt công chúng vào ngày 25 tháng 7 năm 2004. Trong khoảng thời gian tương đối ngắn đó, Rails đã phát triển từ phiên bản 0.5 vốn đã rất ấn tượng thành phiên bản 1.0 sắp ra mắt đầy cảm hứng và đã cố gắng duy trì tính dễ sử dụng và năng suất của nó đồng thời bổ sung thêm vô số khả năng mới. Bài viết này sẽ giới thiệu cho bạn các thành phần của phiên bản Ruby on Rails 1.0 sắp tới và cố gắng cho bạn biết nội dung cuộc nói chuyện.

Tôi không có ý định dạy bạn cách sử dụng Rails để tạo các ứng dụng web. Để làm điều này, có lẽ bạn nên bắt đầu với bài viết Rolling with Ruby on Rails. Bài viết này là phần giới thiệu và trình bày về vô số tính năng mà Rails cung cấp.

Năng suất cao và tốc độ phát triển cao

Ở cấp độ tính năng, Ruby on Rails không cung cấp bất kỳ điều gì mới. Các khung web hiện tại đã thực hiện tất cả điều này. Có chuyện gì thế? Sự khác biệt nằm ở cách Ruby on Rails thực hiện điều đó. Khi bạn có thể hoàn thành một ứng dụng web đơn giản trong vài ngày thay vì vài tuần và một ứng dụng phức tạp hơn trong vài tuần thay vì vài tháng, mọi người sẽ chú ý!

Sự chú ý này sẽ chỉ tồn tại trong thời gian ngắn nếu các ứng dụng thu được lộn xộn và khó bảo trì hoặc mở rộng. May mắn thay, Ruby on Rails giúp việc sử dụng các kỹ thuật lập trình tốt trở nên dễ dàng hơn, dẫn đến mã được định dạng tốt và dễ bảo trì.

Sự chú ý cũng sẽ chỉ tồn tại trong thời gian ngắn nếu Ruby on Rails không có chiều sâu - tức là nếu một khi bạn cố gắng sử dụng nó cho một thứ gì đó phức tạp hơn ứng dụng web đơn giản nhất, bạn sẽ ngay lập tức gặp phải một bức tường, không thể tiếp tục do giới hạn hệ thống. Các nhà phát triển có kinh nghiệm, những người biết nhiều về mạng toàn cầu và những người lập trình cứ lặp đi lặp lại rằng đây không phải là trường hợp của Rails. Ví dụ, tác giả của Tomcat, Ant và Servlet API, James Duncan Davidson gần đây đã viết:

Rails là framework phát triển web được thiết kế tốt nhất mà tôi từng sử dụng. Và đây là kết quả mười năm làm việc của tôi với tư cách là một nhà phát triển web. Tôi đã phát triển các khung của riêng mình, giúp phát triển API Servlet và xây dựng nhiều máy chủ web từ đầu. Trước Rails, chưa có ai làm điều này trước đây. Tôi không muốn nói rằng họ đã làm mọi thứ đúng. Cô ấy không hoàn hảo về mọi mặt. Tôi có một vài thắc mắc về cách mọi thứ được kết hợp với nhau. Nhưng đó không phải là về sự hoàn hảo. Vấn đề là Rails cho phép bạn làm việc rất nhanh, đồng thời có chiều sâu giúp bạn tiến về phía trước. Và Rails làm điều này rất tốt.

Có thể khó tin rằng điều này có thể thực hiện được mà không có một số hạn chế đáng kể. May mắn thay, bạn không cần phải tin lời tôi (hoặc của bất kỳ ai khác). Bạn có thể dễ dàng chứng tỏ bản thân trong một ngày hoặc ít hơn bằng cách chỉ cần xem qua hướng dẫn Ruby on Rails và phát triển ngay một ứng dụng khiêm tốn mà bạn chọn. Suy cho cùng, thà nhìn một lần còn hơn nghe trăm lần. Nếu bạn không muốn thấy mình làm việc siêu năng suất, bạn luôn có thể xem người khác làm tất cả cho bạn trong video Rails mới.

Rails làm điều này như thế nào?

Giống như một công thức hay, Rails giúp bạn đạt được mức năng suất mới này bằng cách kết hợp đúng nguyên liệu với đúng số lượng. Dưới đây là một số thành phần quan trọng tạo nên Rails.

Phần lớn sức mạnh của Rails đến từ ngôn ngữ lập trình Ruby. Thiết kế độc đáo của Ruby giúp dễ dàng tạo các ngôn ngữ và siêu lập trình dành riêng cho miền. Rails tận dụng tối đa điều này.

Triển khai MVC đầy đủ

Rails là một framework MVC (model, view, view), nó cung cấp các thành phần cho mỗi lớp hoạt động liền mạch với nhau. Các framework khác thường chỉ triển khai một phần của giải pháp, yêu cầu nhà phát triển phải tích hợp nhiều framework khác nhau vào ứng dụng và sau đó làm cho chúng hoạt động cùng nhau. (Ví dụ: nhà phát triển Java có thể sử dụng Hibernate, Struts và Tiles để hỗ trợ đầy đủ MVC.)

Thỏa thuận thay vì cấu hình

Thỏa thuận thay vì cấu hình có nghĩa là kết thúc tập tin chi tiết cấu hình trong XML - không có cấu hình nào trong Rails! Thay vì XML rườm rà, ứng dụng Rails sử dụng một số quy ước lập trình đơn giản cho phép bạn biết mọi thứ thông qua sự phản ánh và khám phá. Ví dụ: Rails sử dụng sự phản chiếu thông minh để liên kết các bảng cơ sở dữ liệu với các đối tượng Ruby. Mã ứng dụng và cơ sở dữ liệu đang chạy của bạn đã chứa mọi thứ Rails cần biết.

Ít mã hơn

Giữ nó đơn giản thỏa thuận chương trình Rails không chỉ loại bỏ sự cần thiết của các tập tin cấu hình. Điều đó cũng có nghĩa là Rails có thể tự động xử lý vô số chi tiết cấp thấp mà bạn không cần phải nói. Điều này có nghĩa là bạn phải viết ít dòng mã hơn để triển khai ứng dụng của mình. Và càng ít mã thì tốc độ phát triển càng nhanh và càng ít lỗi, giúp mã dễ hiểu, dễ bảo trì và mở rộng.

Máy phát điện

Cách Rails sử dụng phản xạ động và siêu lập trình sẽ loại bỏ phần lớn mã soạn sẵn mà bạn sẽ phải viết. Nhưng thông thường, bạn có thể tránh viết phần còn lại bằng cách sử dụng trình tạo tập lệnh tích hợp. Điều này giúp bạn có nhiều thời gian hơn để tập trung vào mã thực sự quan trọng - logic kinh doanh của bạn.

Trở lại nhanh chóng

Một chu trình phát triển điển hình để thử nghiệm các thay đổi đối với ứng dụng web bao gồm định cấu hình, biên dịch, đẩy, đặt lại và thử nghiệm. Mất nhiều thời gian. Môi trường phát triển Rails không có thứ gì như thế này. Bạn chỉ cần thực hiện các thay đổi và xem chúng hoạt động như thế nào. Đừng phạm sai lầm khi viết điều này là không quan trọng. Thật khó để đánh giá quá cao tác động của thực tế này đến năng suất và quá trình sáng tạo, vì bạn không phải ngắt lời và chờ đợi.

Giàn giáo (Giàn giáo - giàn giáo, giàn giáo. Note per.)

Rails có thể tự động tạo trọn bộ Các thao tác và chế độ xem CRUD (Tạo, Truy xuất, Cập nhật và Xóa) cho bất kỳ bảng cơ sở dữ liệu nào. Chức năng này được gọi là giàn giáo và giúp bạn bắt đầu thao tác với các bảng của mình nhanh hơn. Theo thời gian, bạn có thể dần dần thay thế các thao tác và bản trình bày đã tạo bằng thao tác của riêng mình - tất nhiên, điều này sẽ đẹp và tiện dụng hơn nhiều.

Thành phần đường ray

Bản thân Rails bao gồm một số thành phần mà bạn có thể cài đặt và sử dụng riêng biệt. Mặc dù chúng được thiết kế để hoạt động như một đơn vị duy nhất nhưng các nhà phát triển hầu như luôn sử dụng chúng cùng nhau:

* Bản ghi hoạt động là lớp ánh xạ quan hệ đối tượng (ORM) kết nối các đối tượng (mô hình) nghiệp vụ với các bảng cơ sở dữ liệu. Đây là cách triển khai mẫu ghi tích cực được mô tả bởi Martin Fowler.
* Gói hành động là một thành phần triển khai hai lớp kiến ​​trúc MVC: bộ điều khiển và khung nhìn. Bộ điều khiển quản lý các yêu cầu đến từ trình duyệt của người dùng và gửi chúng đến phương thức thích hợp của lớp bộ điều khiển. Chế độ xem xây dựng phản hồi cho trình duyệt bằng cách sử dụng hệ thống mẫu như ASP hoặc JSP.
* Nguyên mẫu là một thành phần triển khai Ajax, kéo và thả hiệu ứng hình ảnh trên các trang của bạn.
* Action Mailer là thành phần chịu trách nhiệm gửi và nhận email.
* Dịch vụ web hành động cho phép bạn dễ dàng thêm API dịch vụ web vào ứng dụng của mình. Dịch vụ Web Hành động hỗ trợ SOAP, XML-RPC và WSDL.

* Bản ghi hoạt động là lớp ánh xạ quan hệ đối tượng (ORM) kết nối các đối tượng (mô hình) nghiệp vụ với các bảng cơ sở dữ liệu. Nó là sự triển khai mẫu Active Record được mô tả bởi Martin Fowler.
* Gói hành động là thành phần triển khai cả phần xem và phần điều khiển của kiến ​​trúc MVC. Phần bộ điều khiển xử lý các yêu cầu đến từ trình duyệt của người dùng và định tuyến chúng đến phương thức chính xác của lớp bộ điều khiển. Phần view xây dựng phản hồi để gửi lại cho trình duyệt bằng cách sử dụng hệ thống tạo khuôn mẫu tương tự như ASP hoặc JSP.
* Nguyên mẫu là thành phần triển khai các hiệu ứng Ajax, kéo và thả và hình ảnh trong các trang web của bạn.
* Action Mailer là thành phần xử lý việc gửi và nhận email.
* Dịch vụ web hành động là thành phần giúp bạn dễ dàng thêm API dịch vụ web vào ứng dụng web của mình. Dịch vụ Web Hành động hỗ trợ SOAP, XML-RPC và WSDL.

Các tính năng chính

Rails có một số đặc điểm cơ bản và cụ thể.

Máy chủ web

Rails có thể chạy trên hầu hết mọi máy chủ web hỗ trợ CGI. Tuy nhiên, hiệu suất CGI kém nên phương pháp triển khai ưu tiên là sử dụng FastCGI. Phương pháp triển khai ứng dụng Rails trên Apache và LightTPD đã được thử nghiệm khá tốt. Nhân tiện, một sản phẩm mới đã xuất hiện gần đây, SCGI, cung cấp hiệu suất của FastCGI mà không cần cài đặt phức tạp.

Trong quá trình phát triển, thường xuyên nhất một cách đơn giản là sử dụng WEBrick - một máy chủ web đi kèm với Ruby.

Cơ sở dữ liệu

Rails hiện hỗ trợ các DBMS sau:

*MySQL
* PostgreSQL
* SQLite
* Máy chủ SQL
* DB2
*Nhà tiên tri

Bản thân bộ điều hợp cơ sở dữ liệu bao gồm khoảng 100 dòng mã Ruby, vì vậy việc mở rộng trang tính này với một phần tử khác không phải là vấn đề lớn.

Gỡ lỗi

Khi có sự cố xảy ra trong ứng dụng Rails, bạn thường sẽ nhận được thông báo lỗi khá chi tiết trong trình duyệt của mình (nếu bạn đang ở chế độ phát triển). Thông thường, điều này là đủ để phát hiện vấn đề. Nếu không, bạn có các tùy chọn gỡ lỗi sau:

* Chèn đầu ra gỡ lỗi vào bộ điều khiển. Ví dụ:

render_text "Đã tiến xa đến mức này"

render_text "đối tượng người dùng =" + user_obj

* Kiểm tra nhật ký Rails. (Sử dụng tail trên hệ thống *nix.) Xem các tệp Development.log, production.log và fastcgi.crash.log. Hãy nhớ rằng máy chủ web của bạn cũng lưu giữ nhật ký.
* Sử dụng điểm dừng.
* Sử dụng môi trường phát triển thương mại (chẳng hạn như ArachnoRuby) với trình gỡ lỗi tích hợp.

URL tùy chỉnh (đẹp)

Cách Rails liên kết URL với các hành động của bộ điều khiển theo mặc định rất dễ hiểu. Rails cố gắng hết sức để đảm bảo rằng người dùng chỉ nhìn thấy các URL “đẹp”. URL trong Rails đơn giản và rõ ràng, thay vì dài và được mã hóa.

Mặc dù vậy, bạn vẫn có thể tùy chỉnh URL bằng hệ thống định tuyến Rails. Định tuyến URL trong Rails đủ linh hoạt để cho phép bạn tạo hầu hết mọi sơ đồ liên kết URL.

Hệ thống định tuyến Rails là mã Ruby thuần túy, thậm chí còn cho phép bạn sử dụng các biểu thức thông thường. Vì Rails không sử dụng các khả năng của máy chủ web khi liên kết URL (như mod_rewrite của Apache), nên sơ đồ liên kết URL của bạn sẽ hoạt động giống nhau trên bất kỳ máy chủ web nào.

Kiểm tra đơn vị

Rails tích cực áp đặt thử nghiệm đơn vị cho nhà phát triển:

* Tạo bộ điều khiển, mô hình và giàn giáo mới, đồng thời tạo ra các khung thử nghiệm đơn vị tương ứng.
* Việc tuân thủ nghiêm ngặt kiến ​​trúc MVC dẫn đến các hành động và thành phần được kiểm tra tốt.
* Rails bao gồm tập lệnh Rake (Ruby Make) có thể tự động chạy tất cả các bài kiểm tra đơn vị của bạn.

Chi tiết của quy trình được mô tả chi tiết trong Hướng dẫn kiểm tra trong Rails.

Bản ghi hoạt động

Active Record là một phần của Rails chịu trách nhiệm tự động liên kết các bảng cơ sở dữ liệu của bạn với các đối tượng mô hình. Đây là chữ M trong MVC và nó là sự triển khai của lớp ORM trong Rails.

Đối với các trường hợp sử dụng phổ biến nhất (và một số trường hợp không quá phổ biến), bạn sẽ không bao giờ phải xem hoặc viết mã SQL để truy cập hoặc cập nhật cơ sở dữ liệu của mình. Mục đích của Active Record là hoạt động độc quyền với cơ sở dữ liệu quan hệ; nó không cố gắng trừu tượng hóa việc sử dụng SQL. Khi cần, Active Record giúp bạn dễ dàng sử dụng các truy vấn SQL của riêng mình cho những trường hợp phức tạp khi cần thiết. Nhưng ngay cả trong những trường hợp như vậy, bạn thường có thể thực hiện mà không cần viết mã SQL theo cách thủ công.

Tự động ràng buộc

Bản ghi hoạt động tự động liên kết các bảng với các lớp, các hàng với các đối tượng (các phiên bản của một lớp mô hình) và các trường với các thuộc tính đối tượng. Ví dụ mã:

lớp học< ActiveRecord::Base end

tự động liên kết với một bảng có tên sản phẩm, chẳng hạn như:

TẠO các sản phẩm BẢNG (id int(11) NOT NULL auto_increment, tên varchar(255), PRIMARY KEY (id));

và cũng tự động tạo một thuộc tính tên mà bạn có thể sử dụng như thế này:

my_product = Product.find(:first) STDOUT.print my_product.name my_product.name = "Tên sản phẩm mới"

Active Record sử dụng quy tắc số nhiều tiếng Anh để liên kết các lớp với bảng. Tên lớp mô hình là số ít và viết hoa, trong khi tên bảng là số nhiều và chữ thường. Dưới đây là một số ví dụ:

* Lớp mô hình Hóa đơn được liên kết với bảng hóa đơn.
* Lớp mô hình Person được liên kết với bảng people.
* Lớp mô hình Quốc gia được liên kết với bảng quốc gia.
* Lớp mô hình SecurityLevel được liên kết với bảng security_levels.

Quy ước số ít/số nhiều diễn ra khá tự nhiên mã có thể đọc được. Hãy chú ý sự thông minh của mỏ neo trong việc sử dụng các quy tắc số nhiều trong tiếng Anh. Cũng lưu ý rằng tên lớp sử dụng CamelCase (quy tắc Ruby), không giống như các bảng có tên đều là chữ thường và có dấu gạch dưới giữa các từ.

Trong trường hợp cách này không hiệu quả (ví dụ: khi bạn phải làm việc với cơ sở dữ liệu cũ mà bạn không có quyền kiểm soát tên bảng), bạn có thể trực tiếp yêu cầu Active Record nên sử dụng tên nào.

Tài liệu lớp ActiveRecord::Base mô tả quá trình liên kết tự động chi tiết hơn.

Hiệp hội

Các bảng không tồn tại một mình. Ít nhất là thường xuyên. Hầu hết các ứng dụng cơ sở dữ liệu đều sử dụng nhiều bảng với mối quan hệ riêng giữa chúng. Bạn có thể cho Active Record biết về các mối quan hệ này trong các lớp mô hình của mình và Active Record sẽ tạo ra một tập hợp toàn bộ các phương thức để điều hướng các liên kết sẽ giúp bạn truy cập vào dữ liệu bạn cần. Mã mô hình sau:

lớp học< ActiveRecord::Base has_many:clients has_one:account belongs_to:conglomerate end

cho phép bạn viết đoạn mã sau:

my_firm = Firm.find(:last) STDOUT.print my_firm.account.name STDOUT.print my_firm.conglomerate.employee_count cho c trong my_firm.clients STDOUT.print "Khách hàng: " + c.name + "n" end

Mã này sẽ hoạt động chính xác nếu cơ sở dữ liệu có các bảng khách hàng và tài khoản, mỗi bảng có một trường tên và một bảng tổng hợp có trường character_count.

Tài liệu dành cho mô-đun ActiveRecord::Assocations giải thích chi tiết về các mối liên kết trong Rails.

Thẩm định

Vì có thể bạn không muốn lưu trữ bất cứ thứ gì trong cơ sở dữ liệu của mình nên bạn có thể muốn kiểm tra dữ liệu của mình trước khi lưu. Bản ghi hoạt động chứa một tập hợp các trình xác thực giống macro mà bạn có thể thêm vào mô hình của mình.

tài khoản lớp học< ActiveRecord::Base validates_presence_of:subdomain, :name, :email_address, :password validates_uniqueness_of:subdomain validates_acceptance_of:terms_of_service, :on =>:create validation_confirmation_of:password, :email_address, :on => :create end

Nếu macro xác thực tích hợp không thể cung cấp cho bạn những gì bạn cần, bạn luôn có thể viết phương thức xác thực của riêng mình.

lớp học Người< ActiveRecord::Base protected def validate errors.add_on_empty %w(first_name last_name) errors.add("phone_number", "has invalid format") unless phone_number =~ /*/ end def validate_on_create # only runs the first time a new object is saved unless valid_discount?(membership_discount) errors.add("membership_discount", "has expired") end end def validate_on_update errors.add_to_base("Изменений не было") if unchanged_attributes? end end person = Person.new("first_name" =>"David", "phone_number" => "cái gì?") user.save # => false (và không lưu) user.errors.empty? # => false user.count # => 2 người.errors .on "last_name" # => "không thể để trống" user.errors.on "phone_number" # => "có định dạng không hợp lệ" user.each_full ( |msg| đưa tin nhắn ) # => "Họ không thể"t để trống" + "Số điện thoại có định dạng không hợp lệ" user.attributes = ( "last_name" => "Heinemeier", "phone_number" => "555-555" ) user.save # => true (và người này được lưu trong cơ sở dữ liệu)

Nếu phương thức xác thực tồn tại, Rails sẽ gọi nó ngay trước khi ghi bất kỳ đối tượng nào vào cơ sở dữ liệu. Nếu xác thực không thành công, nó sẽ không ghi đối tượng vào cơ sở dữ liệu. Các phương thức valid_on_create và valid_on_update tương tự nhau, ngoại trừ phương thức trước chỉ được gọi khi Rails tạo cơ sở dữ liệu lối đi mới, trong khi cái sau chỉ được gọi khi Rails sắp cập nhật cái hiện có.

Tài liệu mô-đun ActiveRecord::Validations mô tả tất cả chi tiết một cách chi tiết.

Cuộc gọi lại

Bạn có thể quan sát cách Active Record tạo và xóa các đối tượng mô hình cũng như tạo và sửa đổi chúng trong cơ sở dữ liệu bằng cách sử dụng lệnh gọi lại. bạn có thể dùng cuộc gọi lạiđể xử lý logic nghiệp vụ phức tạp, thay đổi dữ liệu trước khi Rails ghi dữ liệu vào cơ sở dữ liệu (hoặc sau khi Rails đọc dữ liệu từ cơ sở dữ liệu) hoặc bất kỳ lúc nào bạn cần.

Ví dụ: phương thức lưu, lưu dữ liệu đối tượng mô hình vào cơ sở dữ liệu, có tám phương thức gọi lại:

1. before_validation
2. before_validation_on_create
3. after_validation
4. after_validation_on_create
5.trước_save
6.trước_tạo
7. after_create
8. after_save

Điều này mang lại cho bạn toàn quyền kiểm soát các đối tượng mô hình bất cứ khi nào bạn cần.

thẻ tín dụng hạng< ActiveRecord::Base # Выдрать всё, кроме цифр, так чтобы пользователь мог ввести "555 234 34" или # "5552-3434". Чтобы оба варианта значили "55523434" def before_validation_on_create self.number = number.gsub(/[^0-9]/, "") if attribute_present?("number") end end class Subscription < ActiveRecord::Base before_create:record_signup private def record_signup self.signed_up_on = Date.today end end class Firm < ActiveRecord::Base # Уничтожает ассоциированных клиентов и людей, когда уничтожается фирма before_destroy { |record| Person.destroy_all "firm_id = #{record.id}" } before_destroy { |record| Client.destroy_all "client_of = #{record.id}" } end

Tài liệu dành cho mô-đun ActiveRecord::Callbacks đi sâu vào chi tiết về các phương thức gọi lại.

Giao dịch

Giao dịch là cần thiết nếu bạn thực hiện một số thao tác trên cơ sở dữ liệu mà tất cả đều phải thành công trước khi dữ liệu trong cơ sở dữ liệu thay đổi. Nếu một trong số chúng bị lỗi, dữ liệu sẽ không thay đổi. Sử dụng các khối giao dịch để kích hoạt chế độ này.

Các giao dịch cấp cơ sở dữ liệu được hiển thị ở trên sẽ không cho phép rút tiền từ tài khoản của David nếu số tiền đó không thể được ghi có vào tài khoản của Mary. Tuy nhiên, điều này sẽ không bảo vệ các đối tượng david và mary khỏi bị sửa đổi. Để đạt được điều này, bạn nên sử dụng các giao dịch cấp đối tượng:

Bất kỳ lỗi nào trong mã này sẽ hoàn nguyên về trạng thái trước đó của các đối tượng cũng như cơ sở dữ liệu.

Tài liệu dành cho mô-đun ActiveRecords::Transactions giải thích điều này chi tiết hơn.

Và đó không phải là tất cả

Có rất nhiều điều về Active Record hơn những gì tôi có thể mô tả ở đây. Để tìm hiểu thêm, hãy xem API bản ghi hoạt động.

Gói hành động triển khai bộ điều khiển và xem các lớp trong Rails.

Mẫu thuyết trình

Xem mẫu tạo HTML được trả về để phản hồi cho trình duyệt. Mẫu là các tệp rhtml (HTML có nhúng Ruby) rất giống với các tệp ASP hoặc JSP. Văn bản bên trong<% %>đây là mã Ruby sẽ được chạy và văn bản bên trong<%= %>đây là mã Ruby cũng sẽ được khởi chạy và kết quả của nó sẽ được chèn trở lại vào HTML.

Tỉ lệ<%= @name %> <% render_partial "invoices_by_customer" %>

Theo mặc định, Rails sẽ cố gắng tìm một mẫu có tên khớp với hành động hiện đang chạy. Ví dụ: nếu Rails thực hiện hành động chỉnh sửa trên InvoiceController của bạn thì nó sẽ cố gắng tìm và xuất mẫu dạng xem .../app/views/invoices/edit.rhtml.

Bạn cũng có thể xây dựng đầu ra XML (hoặc HTML) trong hành động điều khiển của mình. Điều này rất hữu ích, chẳng hạn như để xây dựng nguồn cấp dữ liệu RSS hoặc phản hồi các yêu cầu XML-RPC. Trong ví dụ sau, xm là một phiên bản của lớp XmlMarkup.

xm.em("gạch chân") # => nhấn mạnh xm.em ( xmm.b("emp & đậm") ) # => nhấn mạnh và táo bạo xm.a("Một liên kết", "href"=>"http://onestepback.org") # => Một liên kết xm.div ( br ) # =>


xm.target("name"=>"biên dịch", "option"=>"fast") # => # CẢNH BÁO: thứ tự các thuộc tính không được giữ nguyên. xm.instruct! #xm.html ( # xm.head ( # xm.title("Lịch sử") # Câu chuyện } # xm.body ( # xm.bình luận! "CHÀO"#xm.h1("Tiêu đề") #

Phần mở đầu

xm.p("đoạn") #

đoạn văn

} # } #

Định tuyến URL

URL được yêu cầu luôn bị ràng buộc với một số hành động bên trong bộ điều khiển. Bộ điều khiển là một lớp Ruby đơn giản và mọi hành động được thực hiện bởi bộ điều khiển đều được phương pháp công khai lớp học này. Theo mặc định, URL được liên kết với một hành động bằng sơ đồ sau:

/:controller/:action/:id

Điều này dễ giải thích nhất bằng một ví dụ. Nếu Rails nhận được URL http://myapp.com/invoices/show/37, nó sẽ tự động liên kết nó với lớp trình điều khiển InvoicesController và với phương thức của lớp đó được gọi là show. Rails cũng sẽ chuyển giá trị 37 cho phương thức như một phần của hàm băm tham số dưới tên id. Băm tham số chứa các giá trị của các trường yêu cầu (lấy từ URL) và dữ liệu phần tử biểu mẫu. Mã có thể trông như thế này:

lớp InvoicesController def show @invoice = Invoice.find(params[:id]) end end

Bởi vì các hành động là các phương thức được nhóm trong một bộ điều khiển (thay vì các đối tượng lệnh riêng biệt), chúng có thể dễ dàng chia sẻ các phương thức hỗ trợ.

Nếu như cách tiêu chuẩn Nếu không thích các ràng buộc URL, bạn có thể dễ dàng chỉ định các quy tắc định tuyến của riêng mình, thậm chí sử dụng các biểu thức thông thường. Vì Rails triển khai cơ chế định tuyến URL riêng nên bạn không cần phải loay hoay với mod_rewrite của Apache và các quy tắc định tuyến của bạn sẽ hoạt động giống nhau trên tất cả các máy chủ web.

Quy tắc định tuyến URL của Rails là mã Ruby đơn giản. Đây là một ví dụ:

map.connect "date/:year/:month/:day", :controller => "blog", :action => "by_date", :month => nil, :day => nil, :requirements => (: năm => /d(4)/, :day => /d(1,2)/, :tháng => /d(1,2)/)

Với quy tắc định tuyến này, các địa chỉ sau sẽ hoạt động:

http://myblog.com/date/2005
http://myblog.com/date/2005/08
http://myblog.com/date/2005/08/01

Quy tắc này chia tách URL chứa ngày mà blog có thể sử dụng để hiển thị các bài đăng cho một ngày cụ thể. URL phù hợp với quy tắc sẽ được liên kết với lớp BlogController và phương thức by_date. Băm tham số sẽ chứa các giá trị cho năm có bốn chữ số(/d(4)/ this biểu hiện thông thường Ruby) và tháng và ngày của hai. Ngoài ra, tháng và ngày là tùy chọn; nếu giá trị không xuất hiện, giá trị mặc định của nil sẽ được lưu trong hàm băm tham số.

Xem hướng dẫn Định tuyến Rails để biết mô tả chi tiết.

Bộ lọc cho phép bạn thực thi tiền mã hóa trước khi Rails thực hiện một hành động cũng như sau khi nó thực thi. Điều này có thể hữu ích cho những việc như lưu vào bộ nhớ đệm hoặc xác thực trước khi một hành động được gọi cũng như nén hoặc bản địa hóa phản hồi sau khi hành động đó được gọi. before_filter có thể cho phép hành động được thực hiện bình thường bằng cách trả về true hoặc hủy cuộc gọi bằng cách trả về false (hoặc thực hiện thao tác kết xuất hoặc chuyển hướng).

Ví dụ:

lớp BankController< ActionController::Base before_filter:audit private def audit # записать действие и параметры в лог для аудита end end class VaultController < BankController before_filter:verify_credentials private def verify_credentials # убедиться что пользователь имеет доступ в хранилище end end

Các chi tiết còn lại có trong tài liệu của lớp ActionController::Filters.

Người trợ giúp

Trình trợ giúp là các phương thức (chức năng) thông minh giúp mẫu xem của bạn tạo HTML. Chúng sử dụng các đối tượng mô hình và các lớp điều khiển của bạn để tạo HTML và giúp bạn tiết kiệm rất nhiều thời gian và công sức sau này. Tất nhiên, điều này cũng có nghĩa là bạn sẽ phải viết ít dòng mã hơn, nhưng tôi cá là bạn đã đoán được điều đó.

Bạn có thể tạo các trình trợ giúp của riêng mình, nhưng như bạn có thể đoán, một số trình trợ giúp được tích hợp sẵn với Rails. Ví dụ: trình trợ giúp link_to tạo các thẻ liên kết liên kết đến bộ điều khiển và hành động. Ví dụ:

<%= link_to "Помощь", { :action =>"giúp đỡ") %>

<%= link_to "Содержание справки", { :controller =>"trợ giúp", :action => "chỉ mục") %>

<%= link_to "Удалить этот счёт", { :controller =>"invoices", :action => "delete", :id => @invoice.id ), :confirm => "Bạn có chắc chắn muốn xóa cái này không?" %>

Điều này sẽ tạo một tham chiếu đến phương thức xóa trong lớp InvoiceController và chuyển tham số id (dưới dạng con trỏ tới hóa đơn cần xóa). Nó cũng sử dụng tùy chọn xác nhận đặc biệt để tạo cửa sổ bật lên xác nhận thông qua JavaScript.

Có một tập hợp lớn các trình trợ giúp để tạo biểu mẫu để xem và cập nhật giá trị của các đối tượng trong mô hình ActiveRecord của bạn, nghĩa là đối với các giá trị trong cơ sở dữ liệu của bạn. Giả sử rằng trong cơ sở dữ liệu của bạn có một bảng người với các cột tên, mật khẩu, mô tả và giá trị boolean xác định xem người đó đã kết hôn hay độc thân (OK, một bảng khá lạ xuất hiện :). Đây là một phần của mẫu có ví dụ về thẻ biểu mẫu có thể được sử dụng. (Giả sử rằng @person chứa một đối tượng thuộc lớp Person, được đọc từ một hàng trong bảng people.)

Tên:<%= text_field "person", "name", "size" =>20%> Mật khẩu:<%= password_field "person", "password", "maxsize" =>20%> Độc thân?:<%= check_box "person", "single" %>Sự miêu tả:<%= text_area "person", "description", "cols" => 20 %>

Mã này tạo ra phản hồi HTML sau:

Tên: Пароль: !} Холост?: !} Sự miêu tả:

Có những trình trợ giúp để tạo thẻ tùy chọn cho các danh sách được chọn từ một tập hợp các hàng được đọc từ cơ sở dữ liệu; trợ lý làm việc với ngày tháng, con số và tiền tệ; và nhiều người khác.

* Người trợ giúp bản ghi hoạt động
* Người trợ giúp thẻ nội dung
* Người trợ giúp điểm chuẩn
* Người trợ giúp bộ đệm
* Bắt người trợ giúp
* Người trợ giúp ngày
* Trợ giúp gỡ lỗi
*Người trợ giúp biểu mẫu
*Người trợ giúp tùy chọn biểu mẫu
*Người trợ giúp thẻ biểu mẫu
* Trình trợ giúp JavaScript
* Người trợ giúp số
* Trợ giúp phân trang
* Người trợ giúp thẻ
*Người trợ giúp văn bản
* Tải lên Người trợ giúp tiến độ
* Người trợ giúp URL

Trình trợ giúp AJAX và JavaScript

Rails bao gồm thư viện Prototype JavaScript để triển khai hỗ trợ cho AJAX, hiệu ứng hình ảnh và khả năng kéo và thả.

Mô hình Rails triển khai các hoạt động AJAX rất đơn giản và mạnh mẽ. Khi trình duyệt đã xử lý và hiển thị trang ban đầu, nhiều hành động khác nhau của người dùng có thể khiến một trang mới được hiển thị (như trong các ứng dụng web truyền thống) hoặc kích hoạt hành động AJAX:

1. Cò súng kích hoạt. Đây có thể là người dùng nhấp vào nút hoặc liên kết, thay đổi dữ liệu trong biểu mẫu hoặc trường hoặc chỉ đơn giản là kích hoạt tạm thời (dựa trên bộ đếm thời gian).
2. Máy khách gửi không đồng bộ dữ liệu được liên kết với trình kích hoạt (một trường hoặc toàn bộ biểu mẫu) đến hành động xử lý ở phía máy chủ thông qua XMLHttpRequest.
3. Về phía máy chủ, hành động xử lý sẽ thực hiện một số hành động trên dữ liệu và trả về một đoạn HTML dưới dạng phản hồi.
4. JavaScript phía máy khách (mã được Rails tự động tạo ra) lấy đoạn HTML này và sử dụng nó để cập nhật một phần HTML cụ thể của trang hiện tại, thường đoạn đó được thay thế bằng nội dung của thẻ

.

Điều thú vị là Rails có thể dễ dàng triển khai tất cả những điều này trong ứng dụng web của bạn như thế nào. Ví dụ đơn giản sau đây thêm các phần tử mới vào danh sách:

Hiển thị danh sách với AJAX <%= javascript_include_tag "prototype" %>

Thêm vào danh sách bằng AJAX

<%= form_remote_tag(:update =>"my_list", :url => ( :action => :add_item), :position => "top") %> Văn bản thành phần mới:<%= text_field_tag:newitem %> <%= submit_tag "Добавить элемент через AJAX" %> <%= end_form_tag %>
  • Yếu tố bắt đầu... thêm nhiều hơn nữa!

Bài viết AJAX trên Rails và API trợ giúp JavaScript nói về hỗ trợ AJAX trong Rails một cách chi tiết hơn.

Thư viện Prototype cũng cung cấp cho nhà phát triển Rails một loạt hiệu ứng hình ảnh phía trình duyệt. Script.aculo.us chứa tài liệu và bản trình diễn trực tiếp về hiệu ứng Nguyên mẫu. Nguyên mẫu cũng giúp dễ dàng thêm chức năng kéo và thả vào ứng dụng của bạn, bạn cũng có thể tìm thấy tính năng này tại script.aculo.us.

Bố cục

Bố cục cho phép bạn chỉ định một tập hợp các thành phần cơ bản để hiển thị trên mỗi trang được bộ điều khiển hiển thị. Điều này thường hữu ích để hiển thị đầu trang, chân trang và thanh bên tổng thể. Theo mặc định, Rails tìm trong thư mục bố cục của nó để tìm tệp rhtml có tên khớp với tên của bộ điều khiển. Mẫu bố cục có thể trông như thế này:

<%= @page_title %>

Tiêu đề cho bố cục này
<%= @content_for_layout %>
Phần dưới cùng của bố cục này

Rails sẽ chèn HTML được tạo bởi hành động vào bố cục này, trong đó có ghi @content_for_layout.

Bộ điều khiển cũng có thể trực tiếp chỉ định bố cục nào sẽ được sử dụng cho tất cả các hành động của nó. Điều này giúp đơn giản hóa nhiệm vụ sử dụng một bố cục cho nhiều bộ điều khiển. Bạn có thể thay đổi mẫu bố cục một cách linh hoạt trong thời gian chạy. Ví dụ: sử dụng các bố cục khác nhau cho người dùng đã đăng nhập và khách truy cập ẩn danh.

Để tìm hiểu thêm về bố cục, hãy xem tài liệu ActionController::Layout.

Các bộ phận và thành phần

Các thành phần và một phần cho phép bạn chia các mẫu bản trình bày của mình thành các mô-đun.

Cách dễ nhất là sử dụng các phần, cho phép bạn tách phần chung của mẫu thành một tệp riêng biệt và sau đó hiển thị nó từ nhiều mẫu khác (hoặc nhiều lần trong cùng một mẫu).
Các mẫu một phần luôn có dấu gạch dưới (_) ở phía trước tên tệp của chúng để giúp phân biệt chúng với các mẫu đầy đủ dễ dàng hơn.

Một cách sử dụng điển hình của các phần là hiển thị một mảng (hoặc bộ sưu tập khác) các phần tử.

<% for ad in @advertisements %> <%= render:partial =>"adview", :locals => ( :item => quảng cáo ) %><% end %>

Điều này sẽ hiển thị một phần mẫu _adview.rhtml nhiều lần (một lần cho mỗi phần tử của mảng @advertisms). Đối với mỗi chế độ xem, Rails sẽ chuyển một biến cục bộ tới _adview.rhtml được gọi là mục chứa đối tượng quảng cáo.

Tài liệu ActionView::Partials chứa thông tin chi tiết. Pointstorm có cách trình bày chi tiết hơn về các phần, nhưng nó hơi lỗi thời vì nó sử dụng cú pháp lỗi thời để gọi các phần.

Các thành phần tương tự như các phần ở chỗ chúng cũng hiển thị một mẫu khác trong mẫu hiện tại. Sự khác biệt là các thành phần sử dụng tên và hành động của bộ điều khiển để chèn kết quả thực thi của nó vào mẫu hiện tại.

<%= render_component:controller =>"lịch", :action => "hôm nay" %>

Hãy xem phần Thành phần của hướng dẫn sử dụng Rails nếu bạn muốn tìm hiểu thêm.
Đoạn đầu đài

Giàn giáo cho phép bạn triển khai nhanh chóng các thao tác CRUD (Tạo, Truy xuất, Cập nhật và Xóa) cho bất kỳ bảng cơ sở dữ liệu nào. Chúng không đẹp lắm nhưng chúng cho phép bạn truy cập ngay vào bảng tính của mình qua giao diện web. Theo thời gian, bạn có thể dần dần thay thế các thao tác và mẫu đã tạo bằng thao tác và mẫu của riêng bạn.

Rails hỗ trợ giàn giáo tĩnh và động. Tĩnh tạo ra các tệp mô hình, bộ điều khiển và mẫu. Điều này cho phép bạn xem mọi thứ hoạt động như thế nào và bắt đầu cải thiện cũng như thay đổi mã hiện có. Để tạo giàn giáo tĩnh, hãy đi qua hệ thống tệp tới thư mục chính của ứng dụng Rails của bạn và chạy lệnh như sau:

$ ruby ​​​​script/tạo hóa đơn giàn giáo

Lệnh này sẽ tìm bảng hóa đơn trong cơ sở dữ liệu của bạn và sử dụng lược đồ của nó để tạo mô hình, bộ điều khiển và tất cả các mẫu dạng xem, khung kiểm tra đơn vị và các nội dung khác. Khi quá trình diễn ra, danh sách các tệp được tạo sẽ được hiển thị trên màn hình.

Ưu điểm của giàn giáo tĩnh là bạn có thể xem và thay đổi mã được tạo. Điểm bất lợi là một khi bảng cơ sở dữ liệu được thay đổi, giàn giáo sẽ không còn phản ánh cấu trúc mới của nó nữa. Tuy nhiên, nếu bạn không thay đổi những cái được tạo bởi giàn giáo, bạn có thể chỉ cần tạo lại chúng.

Giàn giáo động không tạo ra bất kỳ tập tin nào. Rails chỉ đơn giản là tạo ra những gì nó cần một cách nhanh chóng trong khi ứng dụng đang chạy. Điều này có nghĩa là mỗi khi bạn thay đổi lược đồ bảng, giàn giáo sẽ tự động phản ánh những thay đổi này. Để kích hoạt giàn giáo động, hãy đặt một dòng mã trong bộ điều khiển:

lớp AccountController< ActionController::Base scaffold:account end

Và nhiều hơn nữa

Cũng giống như Active Record, có rất nhiều thứ trong Action Pack mà tôi không thể nói ở đây. Nếu bạn muốn tìm hiểu thêm, hãy xem API gói hành động.

Action Mailer là một công nghệ đơn giản để gửi và nhận email trong ứng dụng web của bạn. Đây là một phương pháp để gửi email có tệp đính kèm:

# gửi email có tệp đính kèm def signup_notification(recipient) người nhận người nhận.email_address_with_name chủ đề "Thông tin tài khoản mới" từ " [email được bảo vệ]"tệp đính kèm:content_type => "image/jpeg", :body => File.read("an-image.jpg") tệp đính kèm "application/pdf" do |a| a.body = generate_your_pdf_here() end end

Bạn có thể tìm hiểu thêm trong API Action Mailer và Chương 19 về Phát triển web linh hoạt với Rails.

Dịch vụ web hành động

Dịch vụ web hành động cung cấp hỗ trợ phía máy chủ cho các giao thức dịch vụ web SOAP và XML-RPC, đồng thời cho phép bạn dễ dàng tạo các API của riêng mình và xuất bản chúng qua WSDL.

Đây là một phần của API MetaWeblog được triển khai bởi Typo (một hệ thống viết blog nguồn mở được viết bằng Rails):

lớp MetaWeblogApi< ActionWebService::API::Base api_method:getRecentPosts, :expects =>[ (:blogid => :string), (:username => :string), (:password => :string), (:numberOfPosts => :int) ], :returns => [] api_method:deletePost, :expects => [ (:appkey => :string), (:postid => :string), (:username => :string), (:password => :string), (:publish => :int) ], : trả về => [:bool] lớp cuối MetaWeblogService< TypoWebService web_service_api MetaWeblogApi def getRecentPosts(blogid, username, password, numberOfPosts) articles = Article.find_all(nil, "created_at DESC", numberOfPosts) articles.to_a.collect{ |c| article_dto_from(c) } end def deletePost(appkey, postid, username, password, publish) article = Article.find(postid) article.destroy true end end

Đoạn trích này chỉ hiển thị hai trong số bảy phương thức API được Typo xác định trong lớp này.

Nếu bạn muốn tìm hiểu thêm, hãy đọc hướng dẫn Dịch vụ web hành động

Suy nghĩ về sự chia ly

Thông thường, bạn có thể chia các framework để tạo ứng dụng web và các nhà phát triển sử dụng chúng thành hai loại riêng biệt. Ở một đầu của quang phổ, có những framework hạng nặng dành cho những lập trình viên “nghiêm túc”, ở đầu kia có những framework nhẹ, dễ sử dụng dành cho những người thích “vui đùa”. Mỗi nhóm này thường đối xử với nhau mà không có bất kỳ sự tôn trọng nào.

Một trong những điều thú vị nhất là Rails thu hút các nhà phát triển từ cả hai phe. Các nhà phát triển cao cấp cảm thấy mệt mỏi với công việc lặp đi lặp lại, năng suất thấp mà họ phải chịu đựng, trong khi các nhà phát triển cấp thấp hơn cảm thấy mệt mỏi khi phải vật lộn với một mớ mã không được bảo trì khi ứng dụng của họ vượt quá mức đơn giản. Cả hai nhóm này đều tin rằng Rails giải quyết được một số vấn đề đáng kể của họ. Tôi không biết bạn thế nào, nhưng đối với tôi đây có vẻ là một sự thật tuyệt vời.

Tôi đã dành ~14 giờ làm việc cuối cùng chỉ dành cho Ruby on Rails, lập trình một dự án đơn giản “Y”, có thể nói, một framework nhỏ như vậy. Mọi thứ diễn ra theo...

hồng ngọc  - một ngôn ngữ lập trình cấp cao năng động, phản xạ, thông dịch để lập trình hướng đối tượng nhanh chóng và thuận tiện.

Viên ngọc trên tay vịn  - một khung hoàn chỉnh, đa cấp để xây dựng các ứng dụng web sử dụng cơ sở dữ liệu, dựa trên kiến ​​trúc Model-View-Controller (MVC).

Nhà phát triển

Hãy bắt đầu với thực tế là ngôn ngữ lập trình Ruby không dành cho người mới bắt đầu. Rào cản gia nhập rất cao, vì vậy các lập trình viên Ruby thường đến sau vài năm làm việc với bất kỳ ngôn ngữ lập trình nào khác. Độ tuổi trung bình của một lập trình viên Ruby là 25–28 tuổi. Một lập trình viên Ruby on Rails mới bắt đầu bình thường là một nhà phát triển web giàu kinh nghiệm với nhiều kiến ​​thức, kinh nghiệm phát triển dự án bằng bất kỳ ngôn ngữ nào khác, hiểu biết về nguyên tắc lập trình và hiểu biết tuyệt vời về phát triển web nói chung.

Lợi ích chính của Ruby/Ruby on Rails

Tốc độ phát triển

Ưu điểm chính của ngôn ngữ lập trình Ruby và khung Ruby on Rails là tốc độ phát triển. Thực tiễn cho thấy tốc độ phát triển dự án sử dụng RoR tăng 30–40% so với bất kỳ ngôn ngữ hoặc framework lập trình nào khác. Trước hết, sự gia tăng tốc độ phát triển được xác định bởi một bộ công cụ RoR tiêu chuẩn sẵn sàng sử dụng rộng rãi, một bộ khổng lồ các giải pháp làm sẵn trong cộng đồng, ngôn ngữ Ruby và sự dễ dàng lập trình trong đó.

Một trong những phần quan trọng nhất của văn hóa RoR là tính xã hội. Giải quyết được vấn đề, giúp đỡ người khác giải quyết nó. Đã triển khai mô-đun của bạn, hãy chia sẻ nó với cộng đồng. Do đó, hiện tại, hàng nghìn giải pháp làm sẵn cho một số vấn đề nhất định được lưu trữ trong phạm vi công cộng. Xác thực, ủy quyền, hệ thống nhận xét, hệ thống thanh toán, danh sách gửi thư và nhiều hơn nữa (tất cả những gì thường được phát triển từ đầu) đều do người khác triển khai, được thử nghiệm và đề xuất bởi một cộng đồng lớn.

Văn hóa và tiêu chuẩn

Ruby on Rails là một framework. Thường thì khuôn khổ không cho phép bạn tự mình làm mọi việc. Tất nhiên, trong Ruby on Rails, bạn có thể “phát minh lại bánh xe của riêng mình” và lập trình theo bất kỳ hướng nào mà không cần dựa vào các tiêu chuẩn; nhưng thường thì điều này không bắt buộc. Các tiêu chuẩn để đặt tệp trong một dự án, các tiêu chuẩn để viết mã trong một dự án và các quy tắc chung để lập trình trong Ruby on Rails cấu trúc chặt chẽ bất kỳ dự án nào. Do đó, dự án trở nên dễ đọc. Người mới tham gia dự án rất nhanh. Kinh nghiệm cho thấy rằng bất kỳ ai mới tham gia dự án đều thực hiện những chỉnh sửa hữu ích đầu tiên ngay trong ngày đầu tiên làm việc. Do đó, sẽ không được coi là vấn đề lớn nếu việc phát triển dự án ban đầu được thực hiện bởi một nhóm lập trình viên và việc hỗ trợ hoặc sửa đổi dự án được thực hiện bởi một nhóm hoàn toàn khác. Dự án RoR là điều hiển nhiên dễ hiểu đối với bất kỳ nhà phát triển nào.

Một số công cụ phát triển hay

Kiểm tra

Khi phát triển bất kỳ dự án lớn nào, một câu hỏi hợp lý sẽ được đặt ra. Làm thế nào và ai sẽ thử nghiệm dự án? Không phải lúc nào cũng có đủ phương tiện hoặc mong muốn tạo ra toàn bộ bộ phận kiểm thử và bạn cũng muốn tự động hóa quy trình này. Không giống như các framework khác, RoR có các công cụ kiểm tra tự động tuyệt vời. Các ngôn ngữ và framework lập trình khác không có công cụ kiểm tra tiêu chuẩn. Tất nhiên, có những sự phát triển của bên thứ ba cho phép bạn tổ chức thử nghiệm tự động một dự án PHP, nhưng chúng không được cài đặt sẵn và các lập trình viên thường không nghĩ đến việc sử dụng chúng. Lý tưởng nhất là trong dự án Ruby on Rails, mã dự án không được viết cho đến khi các bài kiểm tra được viết cho mã này. Hệ tư tưởng RoR liên quan đến việc sử dụng ban đầu các phương pháp BDD (Phát triển theo hướng hành vi) hoặc TDD (Phát triển theo hướng thử nghiệm).

Bộ nhớ đệm

Dự án bộ nhớ đệm là một trong những giai đoạn quan trọng nhất trong quá trình phát triển một dự án Internet lớn. PHP có nhiều tùy chọn khác nhau để lưu trữ dữ liệu. Các tùy chọn và công cụ này được vặn, gắn, gắn, gắn vào bên cạnh. Vẫn chưa có sự đồng thuận trong cộng đồng PHP: nên sử dụng cái gì tốt nhất, cách tốt nhất để lưu trữ dữ liệu vào bộ đệm, sử dụng công cụ nào.

Ruby on Rails ở cấu hình cơ bản có các công cụ lưu trữ dữ liệu tiêu chuẩn. Khi bắt đầu, các công cụ được cung cấp cho phép bạn triển khai bộ nhớ đệm dữ liệu trên dự án. Bạn có thể lưu trữ toàn bộ trang hoặc khối mã. Bạn có thể lưu vào bộ đệm kết quả truy vấn và mô hình ActiveRecord. Bạn có thể lưu vào bộ đệm bằng memcached hoặc redis hoặc các phương tiện khác. Để triển khai bộ nhớ đệm trong dự án Ruby on Rails, trong 95% trường hợp, bạn sẽ không cần bất cứ thứ gì ngoài các giải pháp tiêu chuẩn và làm sẵn.

Bản địa hóa

Thường có tình huống ai đó đã thực hiện một dự án và sau đó đột nhiên nhận ra rằng cần có phiên bản tiếng Anh để tiếp tục phát triển dự án. Đồng thời, các nhà phát triển PHP bắt đầu bắt đầu nói về việc điều này không thể lường trước được như thế nào, rằng nó kéo dài và cực kỳ tốn nhiều công sức. Họ nói, hãy mở một dự án song song, đây sẽ là bản sao hoàn chỉnh của dự án này và dịch nó.

Ruby on Rails đạt tiêu chuẩn với các công cụ bản địa hóa dự án. Bạn có thể thấy trước nhu cầu hỗ trợ các ngôn ngữ khác nhau trên trang web, cả ban đầu và trong tương lai. RoR có thể phân phối các mẫu khác nhau cho các ngôn ngữ khác nhau, chứa các tệp cấu hình với bản dịch thuật ngữ và nhiều công cụ tiêu chuẩn khác để triển khai bản địa hóa dự án.

Định tuyến (URL đẹp hoặc CNC)

Thông thường trong nhiều dự án PHP, chúng ta có thể thấy hình ảnh trong đó địa chỉ của một trang nhất định rất lớn và khó hiểu. Ruby on Rails có khả năng tiêu chuẩn để định cấu hình linh hoạt định tuyến, loại địa chỉ và tên của các phần chính. Có thể nhanh chóng thay đổi địa chỉ ở một nơi mà không cần phải thay đổi địa chỉ đó trong toàn bộ dự án. Hệ tư tưởng REST được sử dụng tích cực trong cộng đồng nhà phát triển RoR. Địa chỉ trang trong dự án Ruby on Rails luôn rõ ràng, đẹp mắt, được công cụ tìm kiếm hiểu rõ và đơn giản.

Xác thực

Ruby on Rails có các công cụ tuyệt vời cho phép bạn xác thực dữ liệu đến. Người dùng của bạn điền vào biểu mẫu và bạn cần kiểm tra xem địa chỉ email đã được nhập chính xác chưa, mật khẩu có sẵn hay thời lượng đăng nhập tối thiểu bắt buộc là bắt buộc. Các công cụ của Standard Rails sẽ giúp bạn điều này.

Di chuyển và làm việc với cơ sở dữ liệu

Một vấn đề phổ biến trong nhiều dự án PHP là không có khả năng kiểm soát cấu trúc cơ sở dữ liệu bằng các phương tiện và công cụ dễ hiểu. Những thay đổi về cấu trúc thường được thực hiện thủ công và trực tiếp vào cơ sở dữ liệu. Bởi vì điều này, nhiều trường và bảng khó hiểu xuất hiện trong dự án mà không ai nhớ bất cứ điều gì. Ruby on Rails có các công cụ tiêu chuẩn để làm việc với cơ sở dữ liệu - "di chuyển". Cấu trúc cơ sở dữ liệu được lưu trữ trong mã ứng dụng và được cấu hình từ dự án. Cấu trúc của bạn sẽ luôn ở trong kho lưu trữ, mọi thay đổi trong cấu trúc sẽ được ghi lại và gắn với một cam kết cụ thể đối với kho lưu trữ.

Sự an toàn

Ruby on Rails theo mặc định được thiết kế phù hợp với tính bảo mật của dự án. Khi sử dụng các công cụ RoR, việc tiêm SQL và tấn công XSS sẽ bị loại trừ. Tất cả các tham số đầu vào đều được thoát theo mặc định. Các biến đầu ra trong mẫu cũng được thoát trừ khi bạn chỉ định tùy chọn ngược lại. Nhà phát triển không có cơ hội mắc lỗi bảo mật (tất nhiên không phải không có ngoại lệ).

Triển khai

Có rất nhiều công cụ hữu ích và hay trong môi trường Ruby on Rails. Bao gồm các công cụ được sử dụng trong quá trình triển khai. Ví dụ: khi sử dụng Capistrano, việc triển khai phiên bản mới của ứng dụng tới máy chủ sản xuất (hoặc một số máy chủ) sẽ yêu cầu một lệnh trong bảng điều khiển: cap triển khai.

Nguyên tắc bổ sung của Ruby/Ruby On Rails

Hệ thống kiểm soát phiên bản

Khi phát triển bất kỳ dự án Ruby on Rails nào, việc sử dụng các hệ thống kiểm soát phiên bản nổi tiếng đều được ngụ ý. Như họ nói, việc sử dụng git là “bắt buộc tự nguyện”, vì nhiều hệ thống triển khai dự án tự động trên các máy chủ “sản xuất” không hoạt động nếu không có chúng. Các lập trình viên RoR ban đầu, khi tìm hiểu nền tảng, buộc phải thành thạo git, vì nhiều ví dụ mã trong tài liệu ngụ ý việc sử dụng các hệ thống kiểm soát phiên bản này. Phần lớn là vì điều này, những người mới bắt đầu thiếu kinh nghiệm sẽ dễ dàng bắt đầu học PHP hơn và không chạm vào Rails cho đến khi họ đạt đến một mức độ hiểu biết nhất định về phát triển web cũng như các nguyên tắc của nó.

Hệ thống quản lý dự án/người quản lý tác vụ

Ruby on Rails ban đầu được phát triển để triển khai hệ thống quản lý dự án - Basecamp. Redmine (một hệ thống quản lý dự án phổ biến và miễn phí) cũng được tạo trên RoR. Vì vậy, khi làm việc trong các dự án Rails, việc sử dụng các hệ thống như vậy là “tự nguyện ép buộc”. Tất cả các hệ thống đều được tích hợp với hệ thống kiểm soát phiên bản, cho phép điều chỉnh linh hoạt hơn các quy trình phát triển dự án.

Huyền thoại và định kiến

Không có nhà phát triển Ruby on Rails

Hãy bắt đầu với thực tế là có những nhà phát triển, nhưng họ ít hơn các nhà phát triển PHP. Điều này là do các ngưỡng đầu vào khác nhau để làm chủ công nghệ (thường mọi người bắt đầu học Ruby sau vài năm PHP), điều này nói lên chất lượng của các nhà phát triển. Có rất ít nhà phát triển giỏi trong tất cả các công nghệ.

Các nhà phát triển Ruby on Rails rất tốn kém

Các nhà phát triển cấp cao thực sự rất tốn kém. Hơn nữa, chúng đều đắt như nhau đối với bất kỳ ngôn ngữ và nền tảng lập trình nào. Có rất ít nhà phát triển giá rẻ trong RoR do thiếu các nhà phát triển kém trong cộng đồng (tất nhiên là có ngoại lệ).

"Đường ray" không mở rộng quy mô

Đây là quan niệm sai lầm quan trọng nhất của những người chưa cố gắng viết các dự án nghiêm túc bằng RoR. Ruby on Rails có quy mô rất tốt. Hãy xem GitHub, Groupon, Basecamp, v.v. Tất cả các dự án này đều được viết bằng Rails và tất cả các dự án này đều có bất kỳ vấn đề nào khác, nhưng không có vấn đề về quy mô (thường là vấn đề với hiệu suất cơ sở dữ liệu).

Ruby chậm hơn PHP

Hiện tại, hiệu suất của Ruby ngang bằng với PHP. Nhưng nó có thực sự quan trọng đến vậy không? Xét cho cùng, thời gian tạo trang chủ yếu là thời gian dành cho các truy vấn tới cơ sở dữ liệu. Bản thân tốc độ của ngôn ngữ thường không đóng một vai trò lớn.

Đồng thời, bạn có cơ hội tận dụng lợi thế chính của RoR - tốc độ phát triển dự án và chi phí hỗ trợ thấp. Hiện tại, chi phí của các nhà phát triển cao hơn rất nhiều so với chi phí mua thêm một thẻ nhớ cho máy chủ. Trong mọi trường hợp, vấn đề về hiệu suất của bất kỳ dự án nào không phải là vấn đề chọn sai nền tảng hoặc ngôn ngữ lập trình. Rất có thể, đây là những vấn đề về kiến ​​trúc dự án, bộ nhớ đệm dữ liệu hoặc tối ưu hóa cơ sở dữ liệu có sai sót ban đầu.

Một vài trích dẫn từ những người nổi tiếng trong cộng đồng Ruby

« Viên ngọc trên tay vịn   - đây là bước đột phá trong việc hạ thấp rào cản gia nhập ngành lập trình. Các ứng dụng web mạnh mẽ trước đây phải mất hàng tuần hoặc hàng tháng để phát triển giờ đây có thể được xây dựng chỉ trong vài ngày."

« Viên ngọc trên tay vịn PHP   - nó giống như Apple Macintosh và PC. Chúng tôi tuy ít nhưng chúng tôi là những người ưu tú. Ruby on Rails và PHP là văn hóa đối lập với sự hỗn loạn. PHP cho phép bạn chế tạo chiếc xe đạp của riêng mình từ các bộ phận của những chiếc xe đạp khác mà không cần dựa vào bất kỳ “kinh thánh về xe đạp” nào. Các nhà phát triển RoR tiến bộ hơn bất kỳ học sinh nào chỉ cần đọc một cuốn sách và nói rằng mình biết PHP. Lợi thế của chúng tôi là bất chấp sự hỗn loạn của PHP, chúng tôi có tổ chức hơn”.

“Theo kinh nghiệm của tôi, các chương trình viết bằng Ruby có ít dòng hơn các chương trình tương tự được viết bằng Java và C#. Và càng ít mã thì càng dễ bảo trì, điều này rất quan trọng vì chi phí bảo trì dài hạn được coi là thành phần chi phí lớn nhất của các dự án phần mềm thành công. Việc gỡ lỗi các chương trình nhỏ mất ít thời gian hơn, thậm chí không cần các công cụ gỡ lỗi ưa thích.”

“Tại sao các nhà phát triển ứng dụng doanh nghiệp có kinh nghiệm như tôi lại yêu thích Ruby và Rails? Để đáp ứng những yêu cầu này, độ phức tạp của các giải pháp được tạo bằng công nghệ Java và Microsoft đơn giản là không thể chấp nhận được. Sự phức tạp quá mức ngăn cản một cá nhân hiểu được toàn bộ dự án và làm phức tạp đáng kể việc giao tiếp trong nhóm. Việc nhấn mạnh vào việc tuân theo các mẫu thiết kế và tập trung vào hiệu suất trên các nền tảng này sẽ làm mất đi niềm vui khi làm việc trên một ứng dụng.”

« Viên ngọc trên tay vịn , mà không dùng đến bạo lực, buộc các lập trình viên phải viết mã có cấu trúc chặt chẽ hơn. Mã trên “đường ray” có thể được đọc và hiểu ngay cả khi không có tài liệu. Điều này giúp các nhóm phát triển khác nhau hỗ trợ dự án dễ dàng hơn. Dự án không bị ràng buộc với một nhà phát triển hoặc nhóm cụ thể. Các nhà phát triển dự án sau đây không có mong muốn quen thuộc như “Không có gì rõ ràng cả! Hãy viết lại mọi thứ và làm lại theo cách của chúng ta.”

« hồng ngọc   - ngôn ngữ hay. Viết mã bằng Ruby rất thú vị. Mọi người tôi biết đã chuyển sang Ruby và Rails đều nói rằng họ hạnh phúc hơn. Chủ yếu vì lý do này, Ruby và Rails đang thay đổi hiện trạng, đặc biệt là trong lĩnh vực phát triển ứng dụng doanh nghiệp. Trước khi trở thành người chuyển đổi Rails, tôi đã quen làm việc trong một dự án với những yêu cầu mơ hồ, không liên quan đến nhu cầu thực tế. Tôi mệt mỏi với việc lựa chọn giữa các nền tảng cạnh tranh và tích hợp chúng với nhau, mệt mỏi với việc viết những dòng mã xấu xí. Và Ruby là một ngôn ngữ cấp cao, năng động. Mã Ruby dễ đọc và viết hơn vì nó ánh xạ tự nhiên hơn đến một miền cụ thể và có phong cách gần gũi hơn với ngôn ngữ tự nhiên của con người. Sự dễ nhận biết có rất nhiều lợi ích không chỉ trong ngắn hạn mà còn về lâu dài, vì chương trình được chuyển sang sử dụng trong công nghiệp và các lập trình viên bảo trì phải dễ hiểu.”

« Không có chỗ cho sự ép buộc trong cộng đồng Rails. David Heinemeier Hansson đã chọn một ngôn ngữ mang lại niềm vui cho ông. Nền tảng Rails được sinh ra từ đoạn mã mà anh ấy cho là đẹp. Điều này đặt ra nền tảng cho giao tiếp trong cộng đồng Rails. Mọi thứ trong thế giới Rails đều mang tính chủ quan. Một người có thể chấp nhận điều gì đó hoặc không. Nhưng giữa người chấp nhận và người không chấp nhận, không có ác ý mà chỉ có sự cố gắng thuyết phục nhẹ nhàng mà thôi.”

“Khi bắt đầu sự nghiệp phát triển web, tôi đã dành rất nhiều thời gian để lập trình bằng PHP. Giống như bất kỳ lập trình viên nào, tôi đã bắt đầu viết CMS của riêng mình. Tôi liên tục không hài lòng với các công cụ mà PHP cung cấp cho tôi và tôi đã nghĩ ra một framework nhỏ của riêng mình. Trong khuôn khổ của riêng mình, tôi đã triển khai mọi thứ sao cho thuận tiện cho mình. Hãy tưởng tượng sự ngạc nhiên của tôi khi nhìn thấy Rails. Tôi nhận ra rằng Ruby on Rails rất giống với framework của tôi, do đó, họ đã triển khai và hoàn thiện mọi thứ mà tôi còn thiếu trong PHP. Hãy thêm vào đây một cộng đồng khổng lồ liên tục cập nhật đường ray - chúng tôi có một công cụ trong đó đơn giản là thuận tiện và tốt để thực hiện bất kỳ dự án web nào. Tôi từ bỏ khuôn khổ của mình và vui vẻ chuyển sang RoR. Tôi nghĩ Ruby on Rails khiến các lập trình viên hạnh phúc hơn.”

Cảnh sát Gary Gary
Xuất bản 27/05/2008

Tháng trước, tôi đã trình bày chi tiết về ngôn ngữ lập trình Ruby, một ngôn ngữ động đã trở thành công cụ được nhiều nhà phát triển phần mềm lựa chọn. Tháng này tôi sẽ nói về cơ sở hạ tầng để tạo các ứng dụng Web dựa trên Ruby - Rails. Rails thể hiện giá trị của các framework, tính hiệu quả phổ biến của các ngôn ngữ động như Ruby và lợi ích dành cho các nhà phát triển đi kèm với các quy ước cấu hình sẽ được thảo luận tiếp theo.

Tìm kiếm lợi nhuận lớn hơn trên mỗi đơn vị lao động đầu vào

Kể từ khi các lập trình viên bắt đầu tạo ra phần mềm, họ đã không ngừng suy nghĩ về cách mang lại nhiều giá trị khách hàng hơn cho phần mềm với cùng một lượng công sức. Trong 50 năm qua, nhiều lý thuyết đã xuất hiện về cách đạt được điều này. Chúng tôi chắc chắn đã chứng kiến ​​​​sự phát triển của các ngôn ngữ lập trình cấp cao. Nhưng sự cải tiến dần dần của các ngôn ngữ cấp cao khó có thể khiến chúng ta nhảy dựng lên ghế, tự vỗ vào trán và kêu lên “wow!” Ngay cả những ngôn ngữ lập trình động được phân loại là "Ngôn ngữ cấp độ rất cao" (VHLL) vào những năm 1990 cũng không thể mang lại những lợi ích mà hầu hết chúng ta mong muốn và cần để đáp ứng các yêu cầu phần mềm ngày càng tăng.

Chúng tôi đã cung cấp các ý tưởng về cách cải thiện năng suất của lập trình viên bằng cách sử dụng các khung có thể tái sử dụng, các công nghệ xuyên suốt như lập trình hướng theo khía cạnh, phát triển dựa trên thành phần, kiến ​​trúc hướng dịch vụ, kiến ​​trúc hướng mô hình, v.v. Tất cả điều này đã làm tăng năng suất nhất định, miễn là nó được sử dụng đúng cách. Mặc dù chúng tôi chưa tạo ra công nghệ cho phép chúng tôi tạo chương trình mà không cần sự tham gia của lập trình viên (đó là điều mà một số chuyên gia mơ ước), nhưng chúng tôi đã đạt được một bước tiến lớn trong việc tăng năng suất của các lập trình viên. Tuy nhiên, chúng tôi vẫn chưa đạt được mức tăng hiệu suất gấp 10-100 lần như mong đợi.

Trước khi tiếp tục câu chuyện, tôi muốn cảnh báo bạn rằng cơ sở hạ tầng Rails cũng không mang lại cho chúng ta lợi ích như vậy trong trường hợp chung. Tuy nhiên, trong miền ứng dụng Web, tôi đã thấy các ví dụ trong đó Rails mang lại chính xác loại hiệu suất này.

Rails là gì?

Rails là một framework được xây dựng trên ngôn ngữ lập trình Ruby để phát triển, bảo trì và triển khai các ứng dụng Web. Với một số giả định, cơ sở hạ tầng có thể được định nghĩa là một trình tạo ứng dụng hoặc ứng dụng bán thành phẩm có thể được điều chỉnh cho các mục đích khác nhau (sử dụng trong các lĩnh vực chủ đề khác nhau). Đó là tất cả! Rails là một phần mở rộng có mục đích chung cho ngôn ngữ Ruby. Cơ sở hạ tầng này được thiết kế cho một lĩnh vực chủ đề cụ thể - Phát triển web. Rails được xây dựng dựa trên một số nguyên tắc cơ bản giúp thực hiện một số nhiệm vụ thông thường dễ dàng hơn nhiều và giúp hoàn thành các nhiệm vụ mà các phương tiện thông thường không thể đạt được. Rails hào phóng thưởng cho các lập trình viên vì đã tuân thủ các quy ước được các nhà thiết kế khung thông qua bằng cách tạo ra hầu hết một ứng dụng Web điển hình với rất ít yêu cầu lập trình. Bạn có thể gây ấn tượng với đồng nghiệp và người quản lý của mình bằng cách tạo ra các ứng dụng Web tuyệt vời, ngay cả khi bạn chỉ là người mới sử dụng Web.

Rails, còn được gọi là "Ruby on Rails" trong một số bài viết, là sản phẩm trí tuệ của David Heinemeier Hansson, một nhà phát triển ứng dụng Web người Đan Mạch sử dụng ngôn ngữ lập trình Ruby. Anh nhận thấy trong quá trình tạo ứng dụng, anh phải thực hiện nhiều tác vụ thông thường. Giống như nhiều nhà phát triển giỏi, anh bắt đầu tìm cách tự động hóa công việc này. Kết quả của tìm kiếm này là Rails framework. Hansson đã tạo Rails dựa trên ứng dụng có tên Basecamp. Trên thực tế, Rails đã được trích xuất từ ​​Basecamp và được khái quát hóa bằng cách làm nổi bật các điểm chung và gói gọn tính biến đổi. Đây là nguyên tắc chúng tôi thường sử dụng để tạo các ngôn ngữ dành riêng cho từng miền.

Rails là một dự án nguồn mở có cộng đồng nhà phát triển và người dùng rất tích cực. Nếu muốn, bạn có thể tìm hiểu sâu hơn về nội dung bên trong Rails và làm việc với những người dùng cũng như nhà phát triển khác để cải thiện nó. Nhưng nếu bạn chỉ muốn tạo các ứng dụng Web chuyên nghiệp với ít nỗ lực nhất, bạn chỉ cần cài đặt Rails trên hệ thống của mình và bắt đầu. Ồ, tôi quên đề cập - trong số những thứ khác, việc phát triển ứng dụng bằng Rails rất thú vị! Bạn có nhớ cảm xúc của mình khi tạo chương trình hữu ích đầu tiên không? Những cảm giác này quay trở lại với tôi khi lần đầu tiên tôi sử dụng Rails.

Ví dụ đơn giản

Có lẽ mọi bài viết hoặc cuốn sách về Rails đều bắt đầu bằng một ví dụ đơn giản. Tôi sẽ không đưa ra ví dụ này hoặc mô tả chi tiết, tôi sẽ chỉ cho bạn thấy những điểm nổi bật của ví dụ từ cuốn sách phổ biến nhất về Rails, Phát triển linh hoạt với Rails(Phát triển nhanh với Rails) của Thomas và Hansson. Ví dụ này thể hiện cốt lõi của một trang web cửa hàng trực tuyến. Sản phẩm chúng tôi muốn bán đều có tên, mô tả, hình ảnh và giá cả. Sau nửa giờ đọc và nghiên cứu văn bản, tôi tìm thấy một điểm trong ứng dụng nơi bạn có thể thêm sản phẩm vào cơ sở dữ liệu, thay đổi thông tin và xóa chúng. Ứng dụng này sử dụng kiến ​​trúc Model-View-Controller thông thường và Rails giúp dễ dàng duy trì sự phân tách các mối quan tâm vì khung tự động tạo các tệp nguồn hợp lệ trong các thư mục riêng biệt, giúp mục đích của chúng trở nên rõ ràng.

Nội dung của trang Web cuối cùng mà tôi tạo được hiển thị trong Hình 1. Hiện tại tôi chỉ có hai sản phẩm trong danh mục của mình, nhưng chúng ta có thể thấy một số điểm nổi bật trên trang này. Nếu một sản phẩm có hình ảnh giống như sơ đồ cơ chế nhãn của tôi, nó sẽ xuất hiện trên trang. Phần đầu tiên của mô tả sản phẩm được hiển thị cùng với đánh dấu HTML. Có ba liên kết bên cạnh mỗi sản phẩm để chúng ta có thể xem sản phẩm trông như thế nào khi chúng ta hiển thị, chỉnh sửa một mặt hàng hoặc xóa nó. Ngoài ra, còn có liên kết đến trang tạo sản phẩm mới. Rõ ràng là chúng tôi chưa sẵn sàng phát hành trang Web này ra thế giới, nhưng chúng tôi có thể bắt đầu làm việc với các bên quan tâm có yêu cầu đối với ứng dụng của chúng tôi. Điều này cho phép chúng tôi thực hiện một cách tiếp cận lặp đi lặp lại để đạt được các yêu cầu đã xác định, triển khai chúng, xem xét công việc và thực hiện các thay đổi trước lần lặp tiếp theo.

Hình 1. Trang quản lý danh mục sản phẩm

Sự xuất hiện của trang Web của tôi chắc chắn không làm ai ngạc nhiên, nhưng những gì tôi phải làm cho đến thời điểm này là rất nhỏ. Tôi đo khối lượng công việc bằng số lượng lệnh tôi phải nhập từ thiết bị đầu cuối, số dòng mã Ruby, HTML và Ruby nhúng (ERb) mà tôi phải viết. Tôi đã rút ngắn công việc một chút bằng cách sao chép tệp CCS (Cascading Style Sheets) từ các bản tải xuống cho cuốn sách của Thomas và Hansson, vì vậy tôi không đưa những dòng đó vào ước tính lao động của mình. Bảng 1 trình bày kết quả tính toán của tôi.

Bảng 1. Chi phí nhân công quản lý danh mục sản phẩm

Các số trong Bảng 1 đã được làm tròn khi tôi thử nghiệm mã một chút. Nhưng ngay cả khi tôi viết số dòng mã Ruby nhiều gấp đôi, tổng số dòng tôi gõ trong trình soạn thảo hoặc dòng lệnh trong shell terminal sẽ ít hơn 100. Bạn có thể hỏi tôi thực sự đã thu được gì khi viết vài chục dòng. dòng mã chương trình? Đây là danh sách:

Ngoài ra, tôi còn phát hiện ra nhiều điều tuyệt vời hơn nữa mà tôi không phải đối mặt:

  • Tôi chưa viết một dòng mã SQL nào, tuy nhiên ứng dụng của tôi được trang bị cơ sở dữ liệu quan hệ;
  • Tất cả những gì tôi phải làm là viết một phương thức xác thực để đảm bảo rằng giá là chính xác;
  • Tôi không phải viết mã đặc biệt để cập nhật mã ứng dụng của mình khi lược đồ cơ sở dữ liệu thay đổi.

Tôi không phải là nhà phát triển ứng dụng Web. (Tôi không giỏi học công nghệ vì tôi tập trung nhiều hơn vào các khía cạnh khác của phát triển phần mềm. Bạn chỉ có thể làm rất nhiều thứ có sẵn cùng một lúc.) Nhưng với kiến ​​thức rõ ràng là hạn chế về Ruby và HTML, tôi đã tạo ra một số thứ tốt gây ấn tượng với học sinh của bạn bằng cách thể hiện kiến ​​thức của bạn về phát triển Web.

Nguyên tắc đường ray

Làm cách nào Rails cung cấp số lượng chức năng này mà không cần nhiều nỗ lực của nhà phát triển? Một trong những nguyên tắc tái sử dụng là có mối quan hệ nghịch đảo giữa tính linh hoạt của ứng dụng và việc tái sử dụng nó. Nếu bạn muốn thành phần hoặc hệ thống của mình có thể tái sử dụng tốt hơn—nghĩa là có nhiều phần tử có thể tái sử dụng hơn—thì bạn sẽ phải thu hẹp phạm vi sử dụng nó. Đây là điều đầu tiên tôi nghĩ đến khi làm việc với Rails. Rails không phải là một framework thông thường cho phép bạn xây dựng các ứng dụng Web theo bất kỳ cách nào bạn muốn; đúng hơn, nó nhằm mục đích hỗ trợ một nguyên tắc phát triển ứng dụng Web cụ thể. Nếu bạn làm theo các khuyến nghị, bạn có thể đạt được khả năng sử dụng lại đáng kinh ngạc. Nhưng nếu bạn di chuyển ra khỏi hướng đã cho, khả năng sử dụng lại sẽ giảm đi rõ rệt.

Bộ điều khiển xem mô hình

Các nhà phát triển phần mềm đã quen thuộc với kiến ​​trúc Model-View-Controller. Kiến trúc này là nền tảng của các hệ thống giao diện đồ họa người dùng (GUI) đời đầu như giao diện môi trường Smalltalk-80. Khái niệm này rất đơn giản: hệ thống được chia thành ba phần khác nhau (xem Hình 2).

Hình 2. Kiến trúc Model-View-Controller

Kiến trúc MVC chia trách nhiệm của một ứng dụng thành ba phần khác nhau. Model chịu trách nhiệm duy trì trạng thái của ứng dụng. Nó không chỉ truy xuất và lưu trữ dữ liệu mà còn đảm bảo tính toàn vẹn của nó. Logic nghiệp vụ cần được áp dụng cho dữ liệu này được gói gọn trong mô hình. Chế độ xem chịu trách nhiệm hiển thị mô hình cho người dùng ở một hoặc nhiều định dạng. Điều này cho phép mô hình được hiển thị theo nhiều cách khác nhau, tùy thuộc vào nhu cầu của người dùng. Bộ điều khiển có trách nhiệm đảm bảo rằng các thành phần khác thực hiện đúng hành động vào đúng thời điểm. Nó nhận yêu cầu từ người dùng và phân phối chúng đến các thành phần thích hợp. MVC là một kiến ​​trúc đáng tin cậy, hiệu quả cho nhiều loại ứng dụng, bao gồm cả các ứng dụng Web máy khách-máy chủ.

Bằng cách tuân theo các quy ước của Rails, bạn sẽ có sự phân tách rõ ràng các mối quan tâm giữa ba thành phần này. Hình 3 hiển thị một đoạn bố cục của ứng dụng đơn giản của tôi. Chúng ta có thể thấy rằng ứng dụng này có các thư mục riêng cho tất cả các thành phần và một thư mục khác cho tất cả các đối tượng hỗ trợ cần thiết để hỗ trợ chúng.

Hình 3. Phân đoạn cấu trúc ứng dụng

Tại thời điểm phát triển, chúng tôi chỉ có một bộ điều khiển duy nhất, bộ điều khiển quản trị viên. Rails lấy thông tin về bộ điều khiển nào sẽ gọi từ URL hiện tại trên thanh địa chỉ của trình duyệt. Trong trường hợp này, nó được chỉ định trong URL sau địa chỉ máy chủ Web. Khi kiểm tra một ứng dụng, tôi trỏ trình duyệt của mình tới URL http://localhost:3000/admin và localhost:3000 kết nối với máy chủ tôi đang sử dụng - trong trường hợp này là máy chủ WEBrick mặc định đi kèm với Rails. Bộ điều khiển ứng dụng Rails đưa ra yêu cầu tới lớp AdminController. Nếu bạn quan tâm đến nội dung của lớp này, bạn có thể nghiên cứu tệp trong kho lưu trữ kèm theo bài viết này. Bạn sẽ có thể ánh xạ hầu hết các phương thức trong lớp này tới các tham chiếu trong trang Web được hiển thị trong Hình 1. Hầu hết công việc thực sự được thực hiện bởi lớp ApplicationController, lớp này mở rộng lớp AdminController. Đừng lo lắng nếu bạn không hiểu tất cả các chi tiết. Tệp chứa định nghĩa của lớp AdminController, admin_controller.rb, là một trong những tệp lớn nhất trong ứng dụng và tôi chưa viết một dòng nào trong tệp này. Nó hoàn toàn được tạo ra bởi Rails chỉ bằng một lệnh từ tôi.

Phần trình bày của một ứng dụng Web là các trang Web được hiển thị trước mặt người dùng. Rails tạo hầu hết các trang Web cho bạn, nhưng bạn vẫn cần có kiến ​​thức cơ bản về HTML và đủ kỹ năng lập trình Ruby để viết một vài dòng ERb. Không có gì độc đáo về chế độ xem trong Rails. Đối với mỗi hành động, chúng ta phải tạo một tệp .rhtml (Ruby HTML).

Tại thời điểm này, mô hình ứng dụng của tôi khá đơn giản, chỉ có một bảng trong cơ sở dữ liệu về sản phẩm và sản phẩm có bốn thuộc tính mà tôi đã đề cập trước đó. Tôi quyết định đặt URL hình ảnh thành thuộc tính tùy chọn nên không có xác thực nào cho nó. Tất cả các trường khác đều được kiểm tra tính chính xác. Dưới đây là toàn bộ nội dung của tệp sản phẩm.rb. Có phải nó quá lớn không?

lớp học< ActiveRecord::Base validates_presence_of:title, :description validates_numericality_of:price validates_uniqueness_of:title, :message =>"Chúng tôi đã có thứ đó trong danh mục của mình" lỗi xác thực được bảo vệ.add(:price, "phải có giá trị gì đó") nếu price.nil? || giá< 0.01 end end

Ba phương thức valids_ đầu tiên là các phương thức Rails tích hợp, với phương thức xác thực được gọi tự động cho bất kỳ sản phẩm nào đi vào hệ thống. Tôi đã thêm séc để đảm bảo rằng mọi sản phẩm đều có giá ít nhất là 0,01 USD.

Có thể bạn đang thắc mắc làm thế nào mà bảng được tạo ra để ghi lại sản phẩm nếu tôi không viết một dòng SQL nào? Rails có một thành phần khá kỳ diệu tên là Active Record. Bản ghi hoạt động là ánh xạ quan hệ đối tượng (ORM) sử dụng mô hình ORM tiêu chuẩn. Về cốt lõi, nó là một triển khai trừu tượng của mẫu dự án ActiveRecord. Nghĩa là, các bảng được ánh xạ tới các lớp, các đối tượng được ánh xạ tới các hàng và các thuộc tính đối tượng được ánh xạ tới các cột. Active Record, giống như Rails nói chung, sử dụng cách điều khiển màn hình tiêu chuẩn. Nó không hỗ trợ tính linh hoạt đầy đủ nếu không có một số công việc bổ sung. Tuy nhiên, nếu bạn định sử dụng các tính năng tiêu chuẩn của nó theo mặc định thì bạn sẽ phải làm rất ít. Đoạn mã sau biểu thị nội dung của tệp tạo bảng:

lớp TạoSản phẩm< ActiveRecord::Migration def self.up create_table:products do |t| t.column:title, :string t.column:description, :text t.column:image_url, :string end end def self.down drop_table:products end end

Tất cả những gì tôi viết trong mã này là ba dòng t.column.... . Chúng xác định tiêu đề, mô tả và thuộc tính URL của hình ảnh. Để chuẩn bị và định cấu hình cơ sở dữ liệu, tôi đã làm theo các bước sau:

  1. Trên dòng lệnh tôi đã nhập lệnh:

    Mysqladmin -u root tạo depot_development

    Kết quả của lệnh này là một cơ sở dữ liệu đã được tạo cho sự phát triển của tôi;

  2. Tôi đã điều hướng đến thư mục gốc của ứng dụng và nhập lệnh sau:

    Tập lệnh Ruby/tạo sản phẩm mô hình

    Bảng SẢN PHẨM đã được tạo trong cơ sở dữ liệu. Ngoài ra, một số tệp đã được tạo, bao gồm tệp 001_create_products.rb trong thư mục db/migrate của ứng dụng. Đây là tập tin được hiển thị trong danh sách trước đó;

  3. Tôi đã chỉnh sửa tệp để thêm ba định nghĩa cho các cột;
  4. Tôi đã nhập lệnh:

    Cào db: di chuyển

    Các cột đã được tạo trong bảng SẢN PHẨM. Lệnh rake tương đương với lệnh make được sử dụng trong Rails.

Mỗi lần cập nhật lược đồ cơ sở dữ liệu, bạn phải tạo một tệp di chuyển theo cách tương tự như trình tự trước đó. Mỗi tệp di chuyển bắt đầu bằng một số thứ tự lớn hơn tệp di chuyển trước đó một đơn vị và số này tương ứng với phiên bản lược đồ, được lưu trữ trong một bảng cơ sở dữ liệu đặc biệt. Bây giờ bạn có thể cập nhật cơ sở dữ liệu của mình và khôi phục các thay đổi mà không tốn nhiều công sức. Rails làm mọi thứ cho bạn.

Điều này kết thúc việc khám phá kiến ​​trúc MVC, nền tảng của ứng dụng Rails và chuyển sang các nguyên tắc khác.

Thỏa thuận cấu hình

Tôi đã chứng minh nguyên tắc này bằng hành động. Một ứng dụng Rails khá nghiêm ngặt về việc tuân theo một số quy ước. Một số quy ước là những quy ước đặt tên đơn giản, trong khi những quy ước khác liên quan nhiều hơn đến kiến ​​trúc của ứng dụng. Rails có cái nhìn rất rõ ràng về cách xây dựng một ứng dụng Web và nó sử dụng các giá trị mặc định dựa trên mô hình này. Việc cho phép mặc định cho phép tạo ra một phần ứng dụng lớn hơn nhiều so với khả năng có thể có của cơ sở hạ tầng. Nó cũng loại bỏ nhu cầu tốn thời gian cấu hình các môi trường phát triển, thử nghiệm và triển khai. Có hai tệp cấu hình có thể được sửa đổi nếu bạn cần thêm loại MIME hoặc thông tin khác không phù hợp với các tình huống sử dụng thông thường. Một trong những tệp mà bạn có thể cần chỉnh sửa là tệp cơ sở dữ liệu.yml, tệp này mô tả các cài đặt cơ bản cho môi trường phát triển, thử nghiệm và triển khai. Khi tôi tạo ứng dụng, tệp này được tạo với các giá trị mặc định, như trong danh sách sau.

# MySQL (cài đặt mặc định). Nên sử dụng phiên bản 4.1 và 5.0. # # Cài đặt trình điều khiển MySQL: # gem install mysql # Trên MacOS X: # gem install mysql -- --include=/usr/local/lib # Trên Windows: # gem install mysql # Chọn bản dựng win32. # Cài đặt MySQL và đặt bản dựng vào thư mục /bin được chỉ định trong biến đường dẫn. # # Đảm bảo bạn sử dụng kiểu băm mật khẩu mới: # http://dev.mysql.com/doc/refman/5.0/en/old-client.html Development: adapter: cơ sở dữ liệu mysql: tên người dùng depot_development: mật khẩu gốc: máy chủ : localhost # Cảnh báo: Cơ sở dữ liệu được xác định là "kiểm tra" sẽ bị xóa và #được tạo lại khỏi cơ sở dữ liệu đã phát triển của bạn khi bạn chạy "rake". # Không đặt tên giống như cơ sở dữ liệu này trong quá trình phát triển # hoặc trong sử dụng thực tế. kiểm tra: bộ chuyển đổi: cơ sở dữ liệu mysql: tên người dùng depot_test: mật khẩu gốc: máy chủ: sản xuất localhost: bộ chuyển đổi: cơ sở dữ liệu mysql: tên người dùng depot_production: mật khẩu gốc: máy chủ: localhost

Lưu ý rằng mã này sử dụng ba cơ sở dữ liệu khác nhau cho từng môi trường. Nhận xét phía trên mỗi cấu hình môi trường thử nghiệm nói về một số tính năng bổ sung trong quá trình phát triển ứng dụng với Rails. Kiểm tra là một giai đoạn đặc quyền trong quá trình phát triển Rails. Khi bạn mở rộng và sửa đổi ứng dụng của mình theo quy ước, Rails sẽ giúp bạn bằng cách tạo các thử nghiệm tự động chạy mà không cần sự trợ giúp của tiện ích cào. Các thử nghiệm được thực hiện tự động trong một môi trường riêng biệt, giao diện không trùng lặp với môi trường phát triển hoặc sản xuất.

nguyên tắc DRY

Nguyên tắc cuối cùng được sử dụng trong các ứng dụng Rails là nguyên tắc DRY (Đừng lặp lại chính mình, đừng lặp lại chính mình). Các nhà thiết kế và lập trình viên giỏi sử dụng nguyên tắc này trong thực tế. Họ biết rằng nếu việc gì đó được thực hiện một lần, ở một nơi thì sau đó. các dự án trở nên đơn giản hơn và làm việc dễ quản lý hơn nhiều.

Cách tổ chức và tạo ứng dụng trong Rails theo cách DRY rất đơn giản miễn là bạn tuân theo các quy ước. Nếu bạn có thể hiểu mã cơ bản cho một ứng dụng Rails, bạn có thể cho rằng bạn có thể hiểu bất kỳ ứng dụng Rails nào tuân theo các quy ước. Không có gì được lặp lại. Mọi thứ đều ở một nơi và mọi thứ đều có ý nghĩa.

Nhưng liệu ứng dụng có thể mở rộng được không?

Bất cứ khi nào tôi bắt gặp một thứ gì đó có vẻ đơn giản như Rails, tôi lại tự hỏi liệu nó có thể hoạt động trong môi trường sản xuất thực sự với tải nặng hay không. Tôi đã thấy quá nhiều công cụ hứa hẹn tăng hiệu suất đáng kể. Họ thực hiện tốt các dự án “đồ chơi”, nhưng lại thất bại hoàn toàn ở những lần đầu áp dụng chúng vào giải quyết các vấn đề thực tế. Tôi biết khá nhiều câu chuyện thành công liên quan đến Rails, nhưng sự tự tin thực sự đã đến với tôi vào năm ngoái khi chúng tôi triển khai thành công Rails trong viện của mình.

Một trong những đồng nghiệp của tôi tại Học viện Bách khoa Worcester đang phát triển một hệ thống học tập thông minh có tên là Hỗ trợ để giúp giảng viên và sinh viên trong các khóa học khác nhau học và dạy các môn học khác nhau. Giống như nhiều tiểu bang, học sinh tiểu học và trung học của tiểu bang chúng ta phải thực hiện một loạt bài kiểm tra tiêu chuẩn hóa như một phần của quá trình giáo dục để cuối cùng có được bằng đại học. Những bài kiểm tra này, được gọi là bài kiểm tra MCAS, được cung cấp ở mọi cấp lớp để đánh giá trình độ của học sinh trong các môn học chính. Hệ thống học tập Hỗ trợ đã được chứng minh là có hiệu quả trong việc giúp học sinh tiếp thu kiến ​​thức và kỹ năng cần thiết. Năm ngoái, Hỗ trợ đã được sử dụng bởi một nhóm nhỏ sinh viên ở Worcester, Massachusetts, nhưng nhóm Hỗ trợ của đồng nghiệp của tôi đã sớm chuẩn bị cho việc triển khai lớn hơn.

Hỗ trợ là một ứng dụng Web máy chủ-máy khách điển hình. Nó không chỉ giúp giáo viên và học sinh tự sử dụng mà còn hỗ trợ các nhà nghiên cứu phát triển các kỹ thuật giảng dạy mới và cung cấp các chức năng đánh giá. Năm ngoái, Hỗ trợ chứa hơn 50.000 dòng mã, chủ yếu bằng Java. Mã bao gồm nhiều gói và lớp học được phát triển trong nhiều năm bởi các sinh viên đại học và sau đại học. Thật không may, nhóm phát triển thiếu tính nhất quán, vì vậy mã trở nên cực kỳ khó quản lý - tức là nó ngày càng trở nên mỏng manh hơn. Nhóm có thể làm gì để đảm bảo chất lượng cần thiết cho việc triển khai trên quy mô lớn?

Chúng tôi có ba lựa chọn khả thi. Đầu tiên, những nỗ lực quản lý và mở rộng hệ thống hiện tại có thể tiếp tục. Điều này khó có thể kéo dài. Thứ hai, chúng ta có thể viết lại hệ thống từ đầu hoặc cố gắng phát triển kiến ​​trúc hiện có thành hệ thống mà chúng ta cần. Điều này sẽ liên quan đến việc lập trình bằng Java. Lúc đầu nhóm có xu hướng chọn phương án này.

Chúng tôi đã nhận được lựa chọn thứ ba nhờ một trong những sinh viên tốt nghiệp đã tham gia vào công việc Hỗ trợ - anh ấy đề xuất viết lại hệ thống bằng Rails. Người ta có thể tưởng tượng được sự khó chịu mà đề xuất này gây ra cho các đồng chí của anh ấy và vị giáo sư giám sát nhóm. Sinh viên này đã dành vài tuần để phát triển ứng dụng chính, chứa hầu hết chức năng của hệ thống Hỗ trợ. Để làm được điều này, anh phải viết hàng nghìn dòng mã chương trình.

Anh đã thuyết phục được mọi người. Nhóm đã phê duyệt quá trình phát triển và bắt đầu làm việc. Hệ thống mới có tất cả các tính năng của hệ thống cũ và một số tính năng mới, bao gồm giao diện người dùng được cải tiến. Thông tin cuối cùng tôi nhận được là nhóm phải viết và duy trì ít hơn 5.000 dòng mã. Điều này có nghĩa là năng suất tăng hơn 10 lần, với ít lỗi hơn mức trung bình được tìm thấy trong hệ thống.

Đúng, Rails không phải là một món đồ chơi.

Thay vì một kết luận

Ý tưởng tạo chương trình tự động không phải là mới. Tuy nhiên, trong những năm gần đây chúng tôi đã cải tiến đáng kể công nghệ này. Rails là một trong những framework rất hiệu quả để tạo một số loại chương trình nhất định một cách rõ ràng, nhất quán với nỗ lực tối thiểu. Chúng ta có thể mong đợi các hệ thống như Rails sẽ xuất hiện cho các miền khác. Điều này không tệ chút nào về mặt kinh tế. Trên thực tế, có hai hiện tượng khác trong lĩnh vực tạo ứng dụng Web. Đây là hai framework giống Rails được viết bằng PHP. Chúng được gọi là Symfony và CakePHP. Một sự phát triển thú vị khác trong lĩnh vực này mới xuất hiện gần đây là Project Zero, một dự án vườn ươm của IBM. Project Zero không phải là một trình tạo ứng dụng, nhưng nó cung cấp các quy ước và khung làm việc gợi nhớ đến Rails

Nếu bạn chưa bắt tay vào phát triển ứng dụng Web, tôi hy vọng bài viết này cung cấp cho bạn một số thông tin để suy nghĩ và khuyến khích bạn dành chút thời gian, vui vẻ và bắt đầu sử dụng Rails.

Ghi chú

1 Nhiều hướng dẫn có thể giúp bạn trong quá trình thực hiện. Một số trong số chúng được liệt kê trong phần Tài nguyên ở cuối bài viết này. Hãy làm theo hướng dẫn và bạn sẽ ngạc nhiên về việc tạo một ứng dụng Web dễ dàng như thế nào.

2 Phiên bản beta đầu tiên của Rails được phát hành vào tháng 7 năm 2004. Rails 1.0 được phát hành vào tháng 12 năm 2005. Các ví dụ trong bài viết này sử dụng phiên bản 1.2.2.

10 Hệ thống Đánh giá Toàn diện của Massachusetts Xem: