Có gì mới trong Rails 5.1
Bài đăng này đã không được cập nhật trong 7 năm
Rails 5.1 đã công bố bản beta vào khoảng đầu tháng 3, trong đó giới thiệu một số tính năng bổ ích giúp mọi người dễ dàng làm việc với Java script trong ứng dụng Rails của họ.Dưới đây ta hãy cùng tìm hiểu một số tính năng mới của phiên bản này:
Ruby Version
Yêu cầu Ruby version tối thiểu là 2.3.1 và lớn hơn
Không còn những Rake commands thông dụng nữa
Khi chúng ta muốn chạy migrate trong Rails 4 thì chúng ta dùng lệnh: rake db:migrate
.Đối với Rails 5.1, dòng lệnh ấy sẽ trở thành: rails db:migrate
.Trong Rails 5.1, những dòng lệnh rake hiện tại sẽ được chuyển tương ứng sang rails commands.
Và bây giờ, chúng ta có thể restart lại toàn bộ ứng dụng bằng cách chạy rake restart
.
App Server
Trong Rails 5.1 , Puma server được định nghĩa mặc định trong Gemfile:
Yarn Support
Yarn giống như Bundler để quản lý Javascript từ NPM.Với nó, chúng ta có thể dễ dàng sử dụng các thư viện như React, VueJS hay bất cứ thư viện nào khác từ NPM.Nó được tích hợp với Asset pipeline sao cho tất cả các phụ thuộc sẽ hoạt động trơn tru trong bản 5.1.
Webpacker Support
Webpack có thể được sử dụng để biên dịch Javascript qua việc sử dụng gem Webpacker
.Nó được sử dụng để quản lí các Modules và dependencies.Nếu ta đang ở một ứng dụng single page , chúng ta có thể dễ dàng thiết lập React, Angular và Vue.js.
Để start một Rails/React project, ta có thể dùng lệnh dưới đây:
rails new single_page --webpack=react
form_with
bây giờ, ta có thể sử dụng form_with để thay cho cả form_for và form_tag:
# Instead of form_for
<%= form_with model: @post do |form| %>
<%= form.text_field :title %>
<% end %>
# Instead of form_tag
<%= form_with scope: :post, url: posts_path do |form| %>
<%= form.text_field :title %>
<% end %>
System tests với Capybara
Ở phiên bản này Rails sẽ có ActionDispatch::IntegrationTest
cho phép ta sử dụng Capybara để thực hiện integration tests, mà không cần phải sử dụng bất kỳ config nào khác..Mặc định, trình duyệt chrome được sử dụng để thực hiện việc test, ta có thể config để sử dụng trình duyệt khác cho việc này.Ví dụ:
require 'application_system_test_case'
class Users::CreateTest < ApplicationSystemTestCase
test "adding a new user" do
visit users_path
click_on 'New User'
fill_in 'Name', with: 'Arya'
click_on 'Create User'
assert_text 'Arya'
end
end
định nghĩa exception cho ActiveJob
Ví dụ:
class RemoteServiceJob < ActiveJob::Base
retry_on CustomAppException # defaults to 3s wait, 5 attempts
retry_on AnotherCustomAppException, wait: ->(executions) { executions * 2 }
retry_on ActiveRecord::Deadlocked, wait: 5.seconds, attempts: 3
retry_on Net::OpenTimeout, wait: :exponentially_longer, attempts: 10
def perform(*args)
# ...
end
end
Parameterized mailers
ActionMailer::Parameterized cung cấp phương pháp để setup với before_action, bằng cách truyền parameters vào method:
InvitationMailer.with(invitee: foo).account_invitation.deliver_later
class InvitationMailer < ApplicationMailer
before_action { @invitee = params[:invitee] }
def account_invitation
mail to: @invitee.email, # ...
end
end
Tag helper
ActionView tag helper được thay đổi lại như sau:
# Old
tag('div', class: 'foo')
# New
tag.div('Hello, world!', class: 'foo')
tag.div tag.p('Hello world!')
Encrypted secrets
Trước đây, để lưu giữ các biến cần bảo mật ta thường sử dụng ENV.Tuy nhiên, bây giờ, ta có thể setup một file có thể check các biến từ mã nguồn.Ta sẽ có một master key, đóng gói ngoài repo có thể dùng để giải mã các key.
Tham khảo
http://edgeguides.rubyonrails.org/5_1_release_notes.html http://nithinbekal.com/posts/rails-5.1-features/ https://www.railscarma.com/blog/technical-articles/whats-new-rails-5-1/
All rights reserved