2011-11-13 26 views
11

Tôi đang tìm hướng dẫn triển khai tốt cho ứng dụng Rails 3.1.1 trên máy chủ. Và bằng tốt tôi thực sự có nghĩa là hoàn thành. Lý do tôi đăng câu hỏi này là mặc dù có rất nhiều hướng dẫn trên mạng (google, blog, sách, các câu hỏi stackoverflow khác vv ...) tất cả dường như tập trung vào vấn đề với quá trình triển khai hoặc thực hiện một số giả định về môi trường triển khai không phù hợp với những gì tôi cần.Rails 3.1 hướng dẫn triển khai ứng dụng

Tôi nhận ra rằng việc triển khai ứng dụng Rails trên máy chủ sẽ kiểm tra nhiều chương trình và công cụ khác nhau cần phải được định cấu hình và bằng cách nào đó tôi luôn gặp khó khăn về những thứ "nhỏ" khiến tôi rất thất vọng.

Vì vậy, hãy bắt đầu ngay từ đầu. Những gì tôi có bây giờ là một máy chủ mà tôi có thể truy cập thông qua SSH và một tên miền, chúng ta hãy gọi nó là www.example.com. Máy chủ chạy Ubuntu 10.04 x64 mới và chỉ có một người dùng được cài đặt, cụ thể là root (thông qua root tôi truy cập máy chủ bằng SSH). Lưu ý! Không có Apache, Ruby, PHP, MySQL, cPanel hoặc bất kỳ bảng điều khiển nào khác được cài đặt, chỉ là tối thiểu mà đi kèm với một cài đặt mới.

Máy chủ web cũng sẽ lưu trữ một ứng dụng duy nhất và cơ sở dữ liệu sẽ chạy trên cùng một máy.

Từ kiến ​​thức của tôi trong quá trình triển khai một ứng dụng Rails sau các tình huống sau:

  • Cài đặt Ruby

Tôi đã làm điều này bằng cách sử dụng RVM sử dụng Multi-User quá trình cài đặt (đơn giản vì tôi chỉ có người dùng root và nó tự động). Điều này dường như làm việc tốt sau khi giải quyết nhưng tôi có một số câu hỏi:

Sẽ có ý nghĩa hơn khi cài đặt Ruby trực tiếp chứ không phải thông qua RVM (tôi nghĩ có thể về mặt hiệu quả - cũng RVM làm một chút ma thuật đằng sau những scences sửa đổi một số tập tin bash_profile theo những cách mà tôi không hiểu và điều này bằng cách nào đó dường như xâm lấn ...)?

Có ý nghĩa hơn khi cài đặt với tư cách là người dùng riêng biệt thông qua RVM (có thể phát sinh sự cố an toàn) không?

  • đá quý cần thiết

Bây giờ rằng Ruby đã được cài đặt những gì sẽ là thiết lập ban đầu tốt nhất của đá quý để cài đặt cùng phía nó?

Tôi đã cài đặt chỉ gói, vì vậy khi tôi tải ứng dụng lên máy chủ, tôi có thể chạy lệnh cài đặt gói sẽ cài đặt lần lượt các đá quý ứng dụng bắt buộc.

Câu hỏi - Tôi có nên cài đặt đá quý ray trước khi bàn tay không? Có bất kỳ đá quý nào khác cần được cài đặt không?

  • Web server

Đây là nơi nó được khéo léo cho tôi. Tôi đang cố gắng sử dụng apache và mod-hành khách để triển khai (họ có vẻ là phổ biến nhất).Vì vậy, tôi đã cài đặt máy chủ web apache và gem khách và tất cả các phụ thuộc liên quan (thư viện được đề cập bởi hành khách).

Hiện tại, sự cố phát sinh. Điều đầu tiên là người dùng liên quan. Apache chạy như thế nào? Tôi có nghĩa là dưới mỗi người dùng? Nếu tôi cài đặt nó và (lại) bắt đầu nó bằng cách sử dụng người dùng root, nó sẽ chạy vĩnh viễn dưới người dùng root? đây là một điều xấu? Nếu có, tôi có nên tạo một người dùng khác không? Nếu có, làm thế nào? Trong những nhóm nào tôi nên đưa người dùng mới vào, anh ta nên có những quyền gì (cụ thể là những thư mục nào anh ta nên truy cập). Làm thế nào để bắt đầu apache trong trường hợp này (dưới gốc, dưới người dùng, thêm một dòng ở đâu đó trong tập tin cấu hình, vv)

  • Trang web cấu hình

Nơi để đặt cấu hình trang web đồ đạc? Có thể đặt nó vào apache.conf hay tôi nên tạo một tệp mới trong các trang web khả dụng? Hoặc tôi chỉ nên sử dụng lại tệp mặc định đã có ở đó? Nếu một người dùng mới đã được tạo ở bước trước, bạn có quyền gì đối với các tệp cấu hình?

Ngoài ra ... vị trí cuối cùng đặt ứng dụng đường ray? Trong thư mục nào nó sẽ là tốt nhất? Một nơi nào đó dưới nhà? Có thể dưới/var/www? Tôi muốn biết làm thế nào điều này sẽ ảnh hưởng đến quyền của quá trình apache phục vụ ứng dụng? (Nói chung, tôi có vấn đề trong khi phục vụ một ứng dụng, nó phàn nàn rằng nó không có quyền đối với một thư mục cụ thể. Ngoài ra, sử dụng các đường ống tài sản mới - mà tôi không hiểu rõ - các tệp tài sản đang được tạo và dường như không kế thừa các quyền thư mục mẹ ...)

  • Cơ sở dữ liệu

là cơ sở dữ liệu tôi đang sử dụng MySQL và cài đặt nó là khá đơn giản. Câu hỏi mà tôi có ở đây lại liên quan đến người dùng. Tôi có nên sử dụng một người dùng đặc biệt cho cơ sở dữ liệu không? MySQL thực sự quản lý người dùng như thế nào (họ là người nội bộ hay họ là người dùng Linux hay ...?). Người dùng cơ sở dữ liệu có nên giống với "người dùng web" ở trên không? Hay nó nên là một cái khác?

  • Tài sản

Ở đây tôi được thực sự bị mất. Tôi thực sự gặp khó khăn khi làm cho các công trình đường ống tài sản hoạt động. Tôi đã kiểm tra các tập railscasts và cũng là hướng dẫn trang web đường ray và tôi dường như về mặt lý thuyết hiểu điều này, nhưng tôi có vấn đề trong thực tế.

Vì vậy, các câu hỏi ở đây sẽ là - tôi nên chạy những lệnh nào để biên dịch trước nội dung? (Cố gắng chạy tài sản rake: biên dịch trước). Là nó ổn? Tôi nên thay đổi gì trong tệp production.rb? Các tài sản được tạo ra hoạt động như thế nào liên quan đến người dùng web hoặc người dùng cơ sở dữ liệu được tạo ở trên? Cá nhân tôi nhận được sự cố trong bước này, cụ thể là các tệp nhật ký cho biết một số tệp css không thể truy cập được (ví dụ: tôi có thư viện jqplot được cài đặt trong thư mục vendor/asset và các tệp của nó không thể truy cập được - tôi nên thêm tệp kê khai ở đây bằng cách nào đó ?).

Sẽ rất tuyệt nếu ai đó có thể chỉ cho tôi một bài viết hay, hoặc tài nguyên giải thích tất cả những thứ này. Khu vực chính mà tôi gặp phải sự cố là Apache, Passenger, Ruby, Rails và MySQL tương tác với người dùng Linux như thế nào. Làm thế nào để thiết lập đúng các quyền cho thư mục ứng dụng Rails? Đường dẫn nội dung ảnh hưởng như thế nào đến quyền của người dùng này?

Cảm ơn bạn

Trả lời

8

Dưới đây là cách của tôi về triển khai Rails:

  • Cài đặt Ruby

tôi sẽ không sử dụng RVM vì nó rất khó khăn để làm cho nó chạy đúng cách kết hợp với những thứ như công việc cron. Doable (với trình bao bọc ví dụ), nhưng một chút rắc rối. Nếu bạn không cần các phiên bản Ruby khác trên máy đó, chỉ cần cài đặt nó từ chính nguồn.

  • Gems

Chỉ cần cho Bundler làm việc kỳ diệu của nó. Hãy nhớ cài đặt với cờ --without test development --deployment. Tôi sẽ không làm điều đó lên phía trước mặc dù. Chỉ cần chắc chắn rằng bạn có bundler.

  • Web server

Sử dụng hành khách (với một trong hai Apache hoặc Nginx) là một sự lựa chọn tốt và dễ dàng. Khi bạn cài đặt Apache từ apt, nó sẽ chạy trong một người dùng đặc biệt.

Apache được định cấu hình chính xác tự động trên Ubuntu. Nó sẽ bắt đầu khởi động lại.

  • cấu hình website

Tất cả các cấu hình có trong/etc/apache2. Đặt cấu hình máy chủ ảo của bạn trong/etc/apache2/sites-available và sử dụng a2ensite để bật cấu hình đó.

Đặt ứng dụng của bạn ở /var/www, vì đó là vị trí mặc định trong Ubuntu. Tôi thường tạo một người dùng triển khai.

Đảm bảo rằng người dùng có thể truy cập ứng dụng của bạn bằng cách gán ứng dụng của bạn cho nhóm www-data.

  • Cơ sở dữ liệu

MySQL có hệ thống sử dụng riêng của mình. Đăng nhập như là người dùng root và tạo một người dùng mới với SQL: GRANT ALL ON 'application_production'.* TO 'deploy' IDENTIFIED BY 'some password';

  • Tài sản

tài sản nên được tạo ra như là người dùng sở hữu ứng dụng. Bạn nên thêm bất kỳ tệp css và javascript nào vào production.rb.Ví dụ:

config.assets.precompile += %w(backend.css) 
  • Kết luận

Nó giúp để sử dụng một công cụ triển khai như Capistrano. Khi bạn chạy capify, hãy bỏ ghi chú dòng thích hợp trong số Capfile để lấy phần biên dịch nội dung. Đây là của tôi:

ENV['RAILS_ENV'] = 'production' 
load 'deploy' if respond_to?(:namespace) # cap2 differentiator 
load 'deploy/assets' 
load 'config/deploy' 
require 'capistrano/ext/multistage' 
require "bundler/capistrano" 
require 'capistrano_colors' 

Đây chỉ là cách tôi thường cài đặt ứng dụng đường ray của mình. Tôi hy vọng điều này sẽ giúp bạn đi. Gần đây tôi đã viết một viên ngọc để tích hợp Chef -solo với Capistrano, được gọi là capistrano-chef-solo. Nó rất alpha và có thể hơi phức tạp một chút nếu bạn chỉ mới bắt đầu triển khai, nhưng nó có thể giúp bạn.

+0

Tôi đồng ý với mọi thứ ở đây. Để biên dịch và cài đặt hệ thống Ruby mà không có RVM, chúng tôi sử dụng [ruby-build] (https://github.com/sstephenson/ruby-build) (không có rbenv). Và nó có thể là tốt để lưu ý rằng nếu bạn sử dụng Capistrano, tất cả các bạn thực sự cần nó đá quý bundler cài đặt, cài đặt phần còn lại với lệnh chính xác args, Cap sẽ làm cho bạn. –

Các vấn đề liên quan