5

Есть три основных вопроса, с которыми я борюсь, я ценю любую помощь для любого из них.Настройка приложения Rails 4 для производства в подкаталоге под Apache

1) Как настроить приложение Rails на использование myurl.com/myapp/ в качестве корня?

Я пытался в routes.rb:

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

    resources :papers 
end 

и в environment.rb, я добавил это к началу

ENV['RAILS_RELATIVE_URL_ROOT'] = "/myapp" 

Это почти работает, за исключением того, что rake routes не печатает любой маршрут для «/ ", и GET myurl.com/myapp/ производит ActionController::RoutingError (No route matches [GET] "/")

2) Что нужно сказать Apache?

Поставщик моего общего сервера предлагают поместить это ~/html/.htaccess

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

с /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 

При нажатии на любую ссылку на сайт, браузер изменения URL, например до myurl.com/fcgi-bin/rails4/papers/1, где должно быть myurl.com/myapp/papers/1. Как я могу это предотвратить?

3) Как получить активы работают

Я чувствую, что это будет как-то решать вместе с 1) и 2). Однако, прямо сейчас, приложение пытается сделать:

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

который procudes 404 Not Found. Активы также должны находиться под поддиалогом, верно? Как я могу указать рельсы, чтобы их найти или найти?

ответ

3

Есть несколько предположений, которые я собираюсь сделать, чтобы попытаться ответить на ваш вопрос.

  1. Я предполагаю, что есть статический сайт служил в myurl.com и что вы хотите только Rails приложение, чтобы быть поданы на myurl.com/myapp

  2. Я предполагаю, что ваш виртуальный хостинг провайдер предпочитает FastCGI как способ служить Rack приложения (Rails)

Исходя из этих предположений, я считаю, что если вы:

  1. Переместить приложение Rails в папке ~/html/myapp
  2. Добавить .htaccess файл ~/html/myapp/public с содержимым:
 

    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. Добавить dispatch.fcgi файл ~/html/myapp/public с содержимым:
 

    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

приложение должно начинаться просто отлично и маршрут просто отлично ...

Я не думаю, что вам нужно беспокоиться о настройке config.action_controller.relative_url_root.

Я также установил ваши драгоценные камни, используя bundle install --deployment перед развертыванием вашего приложения.

Наконец, причина, вы не получаете корневой маршрут не является, потому что нет: root :to => 'controller#action' в вашем config/routes.rb

Надеется, что это помогает, и если нет, то проверьте:

Dreamhost - Rails 3 and FastCGI и FastCGI setup, который включает в себя некоторые подсказки об использовании ENV['RAILS_RELATIVE_URL_ROOT']

Смежные вопросы