5

Es gibt drei wichtige Probleme, mit denen ich Probleme habe, ich schätze jede Hilfe für sie.Konfigurieren einer Rails 4-App für die Produktion in einem Unterverzeichnis unter Apache

1) Wie konfiguriere ich die Rails App, um myurl.com/myapp/ als root zu haben?

Ich habe versucht, in routes.rb:

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

    resources :papers 
end 

und in environment.rb, fügte ich diese nach oben

ENV['RAILS_RELATIVE_URL_ROOT'] = "/myapp" 

Dies funktioniert fast, außer dass rake routes jede Route nicht für nicht gedruckt „/ und GET myurl.com/myapp/ produziert ActionController::RoutingError (No route matches [GET] "/")

2) Was braucht es um Apache zu erzählen?

Der Anbieter meines gemeinsamen Server vorschlagen diese

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

mit /fcgi-bin/rails4

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

zu ~/html/.htaccess setzen, wenn ich auf der Seite einen Link klicken, wird der URL-Browser ändert sich zum Beispiel zu myurl.com/fcgi-bin/rails4/papers/1, wo es myurl.com/myapp/papers/1 sein sollte. Wie kann ich das verhindern?

3) Wie das Vermögen zum Laufen bringen

Ich fühle mich wie das mit 1 irgendwie zusammen gelöst werden) und 2). Doch jetzt versucht die App zu tun:

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

die procudes ein 404 Not Found. Die Vermögenswerte sollten auch unter dem Unterverzeichnis stehen, oder? Wie sage ich Schienen, um sie dort zu finden?

Antwort

3

Es gibt ein paar Annahmen, die ich machen werde, um Ihre Frage zu beantworten.

  1. Ich gehe davon aus es eine statische Seite an myurl.com serviert ist und dass Sie nur die Rails-Anwendung wollen myurl.com/myapp

  2. bedient werden Ich bin Ihre Shared-Hosting-Provider zieht FastCGI als eine Möglichkeit, unter der Annahme, Rack-Anwendungen (Rails)

auf der Grundlage dieser Annahmen zu dienen, wie ich glaube, dass, wenn Sie:

  1. Ihre Rails-Anwendung unter dem ~/html/myapp Ordner verschieben
  2. eine .htaccess-Datei ~/html/myapp/public mit Inhalt hinzufügen:
 

    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. eine dispatch.fcgi-Datei ~/html/myapp/public mit Inhalt hinzufügen:
 

    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

die App sollte gut und Strecke ganz gut beginnen ...

Ich glaube nicht, dass Sie über die Einstellung config.action_controller.relative_url_root zu kümmern.

Ich würde auch Ihre Edelsteine ​​mit bundle install --deployment vor der Bereitstellung Ihrer App installieren.

schließlich der Grund, warum Sie keine Root-Route bekommen ist, weil es keine: root :to => 'controller#action' in Ihrer config/routes.rb

Hoffnung hilft dies, und wenn nicht, check out:

Dreamhost - Rails 3 and FastCGI und FastCGI setup die beinhaltet einige Hinweise zur Verwendung von ENV['RAILS_RELATIVE_URL_ROOT']