【问题标题】:Resource mapping works locally but not on webserver资源映射在本地工作,但不在网络服务器上
【发布时间】:2010-01-18 07:26:52
【问题描述】:

编辑:

也许这可以提供线索。在我的 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 制作它?

原帖:

我正在尝试部署一个可以在本地正常运行但不能在 Web 服务器上运行的 Rails 网站。 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.

这是我的第一次 Rails 部署,所以可能是我做错了什么。我的虚拟主机技术支持告诉我这是一个编码问题,他们帮不了我。

我的网上网站目录结构是这样的:

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

例如,market 是我试图从我的主页访问的链接之一,它是我的控制器之一。

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

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

【问题讨论】:

    标签: ruby-on-rails deployment


    【解决方案1】:

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

    如果您可以访问 shell,您会执行以下操作(语法可能略有不同):

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

    请注意,您需要先删除 public_html,您应该验证这样做没有负面后果。

    【讨论】:

    • 这是否也解决了路由问题,还是仅针对 rails 公共文件夹中的内容(javascript、样式表、图像)?
    • 这个创建符号链接的命令是否会在某个地方创建一个我可以直接在我的 PC 上创建并上传到网站的文件?
    • 我尝试运行该命令来创建符号链接(使用 cronjob,无法访问 shell)并返回:ln: Creating symbolic link /home/mydomain/public_html/public' to /home/mydomain/etc/rails_apps/mysite/ public/': File exists 我想这是一个错误。那么这是什么意思呢?而且,在您的语法中,为什么第一个路径以斜杠结尾,而第二个没有?这是一个错误吗?
    • 我在 solaris 上,所以您可以尝试删除斜杠,具体取决于您使用的系统。此外,您可能必须删除 public_html,您应该首先检查它是否没有副作用。另一种解决方案是检查 cpanel 是否允许您将 Web 根目录更改为指向您的应用程序公共目录。
    【解决方案2】:

    问题出在我的虚拟主机上。仍然没有被他们解决。

    【讨论】:

      【解决方案3】:

      我遇到了完全相同的问题并找到了解决方法。在 .htaccess 文件中,删除第一个“$”,这样你就有了:

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

      第一位是正则表达式,因此 $ 匹配 URL 的结尾。

      顺便说一句,这是我今天必须解决的无数个问题,因为 cPanel 很烂。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-16
        • 2013-01-14
        • 2023-02-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多