Làm cách nào để thay đổi ứng dụng Rails của tôi để chạy trong chế độ sản xuất? Có một tập tin cấu hình, môi trường.rb chẳng hạn, để làm điều đó?
Làm cách nào để thay đổi ứng dụng Rails của tôi để chạy trong chế độ sản xuất? Có một tập tin cấu hình, môi trường.rb chẳng hạn, để làm điều đó?
Câu trả lời:
Cách thiết lập và chạy ứng dụng Rails 4 trong chế độ Sản xuất (từng bước) bằng cách sử dụng Hành khách của Apache và Phusion:
Thông thường, bạn sẽ có thể tham gia vào dự án Rails của mình rails s
và nhận phiên bản phát triển của ứng dụng tại http://s Something.com:3000 . Chế độ sản xuất là một chút phức tạp hơn để cấu hình.
Tôi đã loay hoay với điều này trong một thời gian, vì vậy tôi nghĩ rằng tôi sẽ viết nó cho những người mới (chẳng hạn như bản thân tôi). Có một vài điều chỉnh nhỏ được lan truyền trên internet và cho rằng điều này có thể dễ dàng hơn.
Tham khảo hướng dẫn này để thiết lập lõi của máy chủ (CentOS 6, nhưng nó nên áp dụng cho gần như tất cả các hương vị Linux): https://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4 -app-with-apache-and-hành khách-trên-centos-6
Đảm bảo tuyệt đối rằng sau khi Hành khách được thiết lập, bạn đã chỉnh sửa /etc/httpd/conf/httpd.conf
tệp để phản ánh cấu trúc thư mục của mình. Bạn muốn trỏ DocumentRoot vào thư mục dự án / thư mục công cộng Rails của bạn Bất cứ nơi nào trong httpd.conf
tệp có loại thư mục này: /var/www/html/your_application/public
cần phải được cập nhật hoặc mọi thứ sẽ trở nên rất bực bội. Tôi không thể nhấn mạnh điều này đủ.
Khởi động lại máy chủ (hoặc ít nhất là Apache service httpd restart
)
Nhập thư mục dự án Rails của bạn /var/www/html/your_application
và bắt đầu di chuyển với rake db:migrate
. Đảm bảo rằng bảng cơ sở dữ liệu tồn tại, ngay cả khi bạn dự định thêm bảng sau (đây cũng là một phần của bước 1).
RAILS_ENV=production rake secret
- điều này sẽ tạo ra một secret_key mà bạn có thể thêm vào config/secrets.yml
. Bạn có thể sao chép / dán phần này vào config / secret.yml để mọi thứ được chạy, mặc dù tôi khuyên bạn không nên làm điều này. Cá nhân, tôi làm bước này để đảm bảo mọi thứ khác đang hoạt động, sau đó thay đổi lại và lấy nguồn sau.
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake assets:precompile
nếu bạn đang phục vụ tài sản tĩnh. Điều này sẽ đẩy các tập tin js, css, hình ảnh vào /public
thư mục.
RAILS_ENV=production rails s
Tại thời điểm này, ứng dụng của bạn sẽ có sẵn http://something.com/whatever
thay vì :3000
. Nếu không, passenger-memory-stats
và xem nếu có một mục như908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname
Có lẽ tôi đã bỏ lỡ điều gì đó ghê tởm, nhưng điều này đã làm việc cho tôi trong quá khứ.
Bây giờ sẽ là
rails server -e production
Hoặc, nhỏ gọn hơn
rails s -e production
Nó hoạt động cho các dự án đường ray 3+.
rails s -e production
server -e production
trên chúng?
production
luôn là mặc định.
echo "export RAILS_ENV=production" >> ~/.bash_profile
Nếu bạn đang chạy trên Hành khách , thì mặc định là chạy trong sản xuất, trong apache conf của bạn:
<VirtualHost *:80>
ServerName application_name.rails.local
DocumentRoot "/Users/rails/application_name/public"
RailsEnv production ## This is the default
</VirtualHost>
Nếu bạn chỉ đang chạy một máy chủ cục bộ với mongrel hoặc webrick, bạn có thể làm:
./script/server -e production
hoặc trong bash:
RAILS_ENV=production ./script/server
thực sự ghi đè hằng số RAILS_ENV trong enviornment.rb có lẽ nên là phương án cuối cùng của bạn, vì có lẽ nó sẽ không được giữ nguyên (xem một câu trả lời khác tôi đã đưa ra về điều đó)
Nếu đề xuất của mipadi không hoạt động, hãy thêm nó vào config / môi trường.rb
# force Rails into production mode when
# you don't control web/app server and can't set it the proper way
ENV['RAILS_ENV'] ||= 'production'
ENV['RAILS_ENV'] ||= 'production'
thể được áp dụng trên chúng quá?
Thay đổi biến môi trường RAILS_ENV
thành production
.
~/.bashrc
hoặc ~/.bash_profile
đơn giảnexport RAILS_ENV=production"
rails s -e production
Điều này sẽ chạy máy chủ với RAILS_ENV
= 'production'
.
Ngoài ra, bạn phải đặt đường dẫn tài sản trong production.rb
config.serve_static_assets = true
Không có điều này, tài sản của bạn sẽ không được tải.
RAILS_ENV=production rails s
HOẶC LÀ
rails s -e production
Theo mặc định môi trường là phát triển.
Trong Rails 3
Thêm Rails.env = ActiveSupport::StringInquirer.new('production')
vào application.rb và rails s
sẽ hoạt động giống nhưrails server -e production
module BlacklistAdmin
class Application < Rails::Application
config.encoding = "utf-8"
Rails.env = ActiveSupport::StringInquirer.new('production')
config.filter_parameters += [:password]
end
end
Nó không phải là một cách tốt để chạy máy chủ rails trong môi trường sản xuất bởi "rails server -e sản xuất", bởi vì sau đó rails chạy như một ứng dụng đơn luồng và chỉ có thể đáp ứng một yêu cầu HTTP tại một thời điểm.
Bài viết hay nhất về môi trường sản xuất cho đường ray là Môi trường sản xuất - Đường ray 3
cho máy chủ mặc định: rails s -e sản xuất
đối với cổng máy chủ costum: rails s -p [port] -e sản xuất, vd. ray s -p 3002 -e sản xuất
Theo mặc định, máy chủ chạy trên môi trường phát triển: $ rails s
Nếu bạn đang chạy trên môi trường sản xuất: $ rails s -e production
hoặc$ RAILS_ENV=production rails s
Vui lòng đảm bảo rằng bạn đã thực hiện bên dưới trong tệp môi trường của bạn.
ENV ['RAILS_ENV'] || = 'sản xuất'
Nếu ứng dụng của bạn chạy trong môi trường lưu trữ được chia sẻ hoặc hành khách ph Muff, bạn có thể cần thực hiện các thay đổi trong .httaccess (bên trong thư mục công cộng) và đặt chế độ làm sản xuất.