资源映射在本地工作但不在Web服务器上工作

时间:2009-10-05 14:01:42

标签: ruby-on-rails deployment

修改

好吧也许这可以给出一个线索。在我的Web主机上的cPanel中创建Rails应用程序时,为了访问应用程序,您需要创建重写规则。我做了什么,但不知道它做了什么。我跟踪它创建了以下2个文件:

home/mydomain/public_html/.htaccess

RewriteEngine on
RewriteCond %{HTTP_HOST} ^mydomain.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.mydomain.com$
RewriteRule ^/?$ "http\:\/\/127\.0\.0\.1\:12030%{REQUEST_URI}" [P,QSA,L]

home/mydomain/.cpanel/ruby-on-rails-rewrites.db:

  appname: helloworld
  domain: mydomain.com
  port: 12030
  rewritebasepath: /home/mydomain/public_html
  url: 

似乎根URL被发送到Rails,但是任何其他URL都没有,我得到了一个Apache 404(不是Rails 404)。 .htaccess文件中有什么问题吗? 重写条件仅适用于域根吗?如果是,我如何为任何URL创建它?

原帖:

我正在尝试部署一个在本地运行良好的rails网站,但不能在Web服务器上运行。 rails应用程序启动正常,我可以访问主页。但任何其他链接都会产生404。

我的主页设置在routes.rb内,如此:

  map.root :controller => "home"

我正在使用RESTful路由,它在本地工作正常。在routes.rb我所拥有的只是一堆

map.resources :posts
map.resources :images

...

如果我将map.root更改为另一个控制器(即map.root :controller => "posts",那么该单页也将显示正常,所有其他链接将返回404,包括之前工作的那个map.root中引用的那个。

这是我的第一次部署,所以可能是我做错了。我的网站托管技术支持人员告诉我这是一个编码问题,他们无法帮助我。

我的网站目录结构如下:

/home/mydomain/etc/rails_apps/mysitedir/  <- rails folders (app, config, db, ...)
/home/mydomain/public_html/  <- nothing here

此外,我的rails公共文件夹中的文件是否需要保留在该文件夹中,还是应该放在网络上的public_html文件夹中?因为现在他们也找不到。如果我将它们放在public_html文件夹中,可以从主页(javascript和css和图像)中找到它们。

在我的cPanel错误日志中,它显示如下错误:

[Mon Oct 05 08:19:41 2009] [error] [client XX.XX.XX.XX]
File does not exist: /home/mydomain/public_html/market,
referer: http://www.mydomain.com/

例如,市场是我尝试从我的主页访问的链接之一,而且它是我的控制器之一。

简而言之,我可以访问的唯一位置是root。

我得到所有这些404的错误是什么? 我没有shell访问权限,我只有cPanel。这是使用Ruby 1.8.5和Rails 2.3.4,(共享)Web服务器是Linux + Apache 2.2.11(Unix)。

3 个答案:

答案 0 :(得分:0)

你需要让你的web root指向/ home / mydomain / etc / rails_apps / mysitedir / public /也许这可以在cpanel中配置?

如果你可以访问shell,你会做类似的事情(语法可能略有不同):

ln -s /home/mydomain/etc/rails_apps/mysitedir/public/ /home/mydomain/public_html

请注意,您需要首先删除public_html,您应该验证这不会产生负面影响。

答案 1 :(得分:0)

问题在于我的网站托管服务商。他们还没有解决。

答案 2 :(得分:0)

我遇到了完全相同的问题并找到了修复方法。在.htaccess文件中,删除第一个'$',以便:

RewriteRule ^/? "http\:\/\/127\.0\.0\.1\:12030%{REQUEST_URI}" [P,QSA,L]

第一位是Regex,所以$匹配URL的结尾。

作为一个侧面咆哮,这是我今天必须解决的第五个问题,因为cPanel很糟糕。