Khi bạn đã hoàn thành việc phát triển ứng dụng hoặc trang web bằng Ruby on Rails, bước tiếp theo là đưa sản phẩm của bạn lên internet để người dùng có thể truy cập. Trong bài viết này, chúng ta sẽ tìm hiểu cách chuyển đổi ứng dụng Rails (hoặc trang web) sang chế độ Production Mode.
Chạy ứng dụng Rails ở chế độ Production
Bài hướng dẫn bắt đầu bằng việc triển khai ứng dụng Rails 5 trên một máy chủ sử dụng hệ điều hành Ubuntu.
Bước 1: Vào thư mục chứa source Rails, chạy lệnh bundle để cài đặt các gem cần thiết.
bundle
Bước 2: Tạo secret key (Khóa bảo mật) cho ứng dụng Rails
bin/rake secret
Copy secret key của bạn để thực hiện bước tiếp theo.
Bước 3: Thiết lập các biến môi trường cho Ứng dụng Rails
– Sửa file /etc/environment, thêm các biến môi trường sau:
SECRET_KEY_BASE=<secret_key> RAILS_SERVE_STATIC_FILES=true RAILS_ENV=production
Sau đó logout và login lại
Bước 4: Tạo database, migrate bảng CSDL và dữ liệu ở chệ độ Production
rails db:create db:migrate db:seed
Bước 5: Tạo thư mục public/assets chứa các file js, css, images, font… cho web/app Rails
rails assets:precompile
Bước 6: Chạy Rails ở Production Mode
rails s -d -b 127.0.0.1
Với
- -d : Chạy ứng dựng Rails ở chế độ background
- -b 127.0.0.1: Để ứng dụng Rails lắng nghe trên địa chỉ IP 127.0.0.1, mục đích của mình sử dụng Nginx để proxy pass sang cổng 80.
Bước 7: Cài đặt nginx server
Mặc định, ứng dụng Rails của bạn sẽ chạy trên cổng 3000, nhưng điều này có thể gây khá nhiều bất tiện. Do đó, để giải quyết vấn đề này, chúng ta sẽ cài đặt Nginx và sử dụng Nginx để chuyển đổi ứng dụng sang cổng 80.
sudo apt install nginx
Bước 8: Cấu hình Nginx để chạy ứng dụng Rails
– Sửa file /etc/nginx/sites-available/default
server { ... location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header X-Forwarded-Host $host; } ... }
Giờ bạn có thể truy cập tới web/app Rails của bạn với địa chỉ http://<domain.com>
Nếu bạn thay đổi file css, js thì nhớ chạy 2 lệnh sau để compile lại thư mục assets trên server.
rails assets:clobber rails assets:precompile
Stop Rails Server
Để dừng và khởi động lại Rails Server ở môi trường Production ta có thể sử dụng các cách sau:
kill -INT $(cat tmp/pids/server.pid)
Hoặc tìm process ID
lsof -wni tcp:3000
Sau đó kill Process ID vừa tìm được bằng command:
kill -9 PID
Các lỗi gặp phải
Khi thực hiện command rails assets:precompile có thể gặp lỗi dưới đây.
Fix lỗi: Uglifier::Error: Unexpected token: punc ((). To use ES6 syntax, harmony mode must be enabled with Uglifier.new(:harmony => true)
Thì sửa file config/environments/production.rb, thay thế
config.assets.js_compressor = :uglifier
Thành
config.assets.js_compressor = Uglifier.new(harmony: true)