5

Są trzy główne problemy, z którymi walczę, doceniam każdą pomoc dla każdego z nich.Konfigurowanie aplikacji Rails 4 do produkcji w podkatalogu pod Apache

1) Jak skonfigurować aplikację Rails tak, aby jako root była myurl.com/myapp/?

Próbowałem w routes.rb:

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

    resources :papers 
end 

oraz w environment.rb dodałem to do górnej

ENV['RAILS_RELATIVE_URL_ROOT'] = "/myapp" 

To prawie działa, z wyjątkiem tego rake routes nie drukuje każdą trasę na „/ "i GET myurl.com/myapp/ produkuje ActionController::RoutingError (No route matches [GET] "/")

2) Co trzeba powiedzieć Apache?

Udzielający moim serwerze udostępnionym sugerują, aby umieścić to ~/html/.htaccess

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

z /fcgi-bin/rails4 będąc

#!/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 

Kiedy klikam dowolny link na stronie, URL zmienia się na przykład przeglądarka do myurl.com/fcgi-bin/rails4/papers/1, gdzie powinno być myurl.com/myapp/papers/1. Jak mogę temu zapobiec?

3) Jak zdobyć majątek pracuje

czuję się jak zostanie to rozwiązane jakoś razem z 1) i 2). Jednak teraz, aplikacja próbuje zrobić:

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

który procudes 404 Not Found. Aktywa też powinny znajdować się w podkatalogu, prawda? Jak mam powiedzieć szynom, aby je tam umieścić?

Odpowiedz

3

Jest kilka założeń, które zamierzam podjąć, aby spróbować odpowiedzieć na twoje pytanie.

  1. Ja zakładając, że jest statyczna strona serwowane w myurl.com i że chcesz tylko aplikacja Rails być podawane na myurl.com/myapp

  2. Ja zakładając, że wspólne hosting provider preferuje FastCGI jako sposób służyć aplikacje Rack (szyny)

na podstawie tych założeń, wierzę, że jeśli:

  1. Przenieś swoją aplikację Rails w folderze ~/html/myapp
  2. Dodaj plik .htaccess do ~/html/myapp/public o treści:
 

    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. Dodaj plik dispatch.fcgi do ~/html/myapp/public o treści:
 

    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

aplikacja powinna rozpocząć się po prostu w porządku, a trasa dobrze ...

Nie sądzę, trzeba się martwić o ustawienie config.action_controller.relative_url_root.

Chciałbym również zainstalować klejnoty przy użyciu bundle install --deployment przed wdrożeniem aplikacji.

Wreszcie, powód nie dostaniesz trasy korzeniowy jest bo tam nie ma: root :to => 'controller#action' w config/routes.rb

nadzieję, że to pomaga, a jeśli nie, sprawdź:

Dreamhost - Rails 3 and FastCGI i FastCGI setup który obejmuje kilka wskazówek dotyczących używania ENV['RAILS_RELATIVE_URL_ROOT']