5

Có ba vấn đề chính mà tôi đang gặp phải, tôi đánh giá cao bất kỳ trợ giúp nào cho bất kỳ ứng dụng nào.Định cấu hình ứng dụng Rails 4 để sản xuất trong thư mục con theo Apache

1) Làm cách nào để định cấu hình ứng dụng Rails có số myurl.com/myapp/ làm gốc?

tôi đã cố gắng trong routes.rb:

scope '/myapp' || '/' do 
    # all resources and routes go here 
    root :to => "papers#index" 

    resources :papers 
end 

và trong environment.rb, tôi bổ sung này lên đầu

ENV['RAILS_RELATIVE_URL_ROOT'] = "/myapp" 

này gần công trình, trừ rake routes mà không in bất kỳ tuyến đường cho "/ ", và GET myurl.com/myapp/ sản xuất ActionController::RoutingError (No route matches [GET] "/")

2) Những gì nó cần phải nói với apache?

Các nhà cung cấp máy chủ chia sẻ của tôi đề nghị đặt này để ~/html/.htaccess

RewriteEngine on 
RewriteRule ^myapp/(.*)$ /fcgi-bin/rails4/$1 [QSA,L] 

với /fcgi-bin/rails4

#!/bin/sh 

# This is needed to find gems installed with --user-install 
export HOME=/home/kadrian 

# Include our profile to include the right RUBY 
. $HOME/.bash_profile 

# This makes Rails/Rack think we're running under FastCGI. WTF?! 
# See ~/.gem/ruby/1.9.1/gems/rack-1.2.1/lib/rack/handler.rb 
export PHP_FCGI_CHILDREN=1 

# Get into the project directory and start the Rails server 
cd $HOME/rails4 
exec bundle exec rails server -e production 

Khi tôi nhấp vào bất kỳ liên kết trên trang web, url trình duyệt thay đổi ví dụ đến myurl.com/fcgi-bin/rails4/papers/1, vị trí phải là myurl.com/myapp/papers/1. Làm thế nào tôi có thể ngăn chặn điều đó?

3) Làm thế nào để có được những tài sản lưu động

tôi cảm thấy như thế này sẽ được giải quyết bằng cách nào đó cùng với 1) và 2). Tuy nhiên, ngay bây giờ, ứng dụng sẽ cố gắng thực hiện:

GET myurl.com/assets/application-5e86fb668d97d38d6994ac8e9c45d45e.css 

có giá trị 404 Not Found. Các tài sản nên được dưới subdirectoy quá, phải không? Làm thế nào để tôi nói cho ray để đặt/tìm thấy chúng ở đó?

Trả lời

3

Có một vài giả định tôi sẽ thực hiện để thử và trả lời câu hỏi của bạn.

  1. tôi giả sử có một trang web tĩnh phục vụ tại myurl.com và rằng bạn chỉ muốn ứng dụng Rails để được phục vụ trên myurl.com/myapp

  2. Tôi giả định nhà cung cấp hosting chia sẻ của bạn thích FastCGI như một cách để phục vụ các ứng dụng rack (Rails)

Dựa trên những giả định, tôi tin rằng nếu bạn:

  1. Di chuyển ứng dụng Rails của bạn trong thư mục ~/html/myapp
  2. Thêm một tập tin .htaccess để ~/html/myapp/public với nội dung:
 

    AddHandler fastcgi-script .fcgi 

    Options +FollowSymLinks +ExecCGI 

    RewriteEngine On 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ dispatch.fcgi/$1 [QSA,L] 

    ErrorDocument 500 "Rails application failed to start properly" 

  1. Thêm một tập tin dispatch.fcgi để ~/html/myapp/public với nội dung:
 

    ENV['RAILS_ENV'] ||= 'production' 
    ENV['GEM_HOME'] = File.expand_path('your_gem_home') 

    require 'fcgi' 
    require File.join(File.dirname(__FILE__), '../config/environment.rb') 

  1. chmod +x ~/html/myapp/public/dispatch.fcgi

ứng dụng nên bắt đầu tốt và tuyến đường tốt ...

Tôi không nghĩ rằng bạn cần phải lo lắng về việc thiết config.action_controller.relative_url_root.

Tôi cũng sẽ cài đặt đá quý của bạn bằng cách sử dụng bundle install --deployment trước khi triển khai ứng dụng của bạn.

Cuối cùng, lý do bạn không nhận được một lộ trình gốc là vì không có: root :to => 'controller#action' trong bạn config/routes.rb

Hope this helps và nếu không, hãy kiểm tra:

Dreamhost - Rails 3 and FastCGIFastCGI setup trong đó bao gồm một số gợi ý về việc sử dụng ENV['RAILS_RELATIVE_URL_ROOT']