我正在努力解决三个主要问题,我感谢任何帮助。
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
当我点击网站上的任何链接时,浏览器网址会发生变化,例如到myurl.com/fcgi-bin/rails4/papers/1
,它应该是myurl.com/myapp/papers/1
。我该如何防止这种情况?
3)如何让资产运作
我觉得这将与1)和2)一起以某种方式解决。但是,现在,该应用尝试执行:
GET myurl.com/assets/application-5e86fb668d97d38d6994ac8e9c45d45e.css
采用404 Not Found
。资产也应该在子目录下,对吧?如何告诉rails在那里放置/找到它们?
答案 0 :(得分:3)
为了尝试回答你的问题,我会做一些假设。
我假设在myurl.com
投放了一个静态网站,并且您只希望在myurl.com/myapp
上提供Rails应用
我假设您的共享托管服务提供商更喜欢将FastCGI作为服务Rack应用程序(Rails)的方式
基于这些假设,我相信如果你:
~/html/myapp
文件夹.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"
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')
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']