Sau khi phát triển xong App/Web bằng Ruby on Rails, điều mà chúng ta cần nghĩ đến là đưa sản phẩm lên internet. Trong bài viết này, VinaSupport sẽ hướng dẫn các bạn chuyển đổi ứng dụng Rails (website) sang chế độ Production Mode.
Chạy ứng dụng Rails ở chế độ Production
Tiền đề của hướng dẫn là chạy ứng dụng Rails 5 trên môi trường server, cài đặt 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 đinh ưng dụng Rails của bạn sẽ chạy trên cổng 3000, điều này khá bất tiện. Vì vậy mình sẽ cài đặt Nginx và sửu dụng Nginx để chuyển đổi nó 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)
Nguồn: vinasupport.com