【问题标题】:Ruby On Rails on Ubuntu + apache2 + PassengerUbuntu + apache2 + Passenger 上的 Ruby On Rails
【发布时间】:2010-11-19 10:27:05
【问题描述】:

我正在尝试使用 ruby​​ on rails for web 开始编程。 我使用 Ubuntu 10.04。我的 IDE 是 NetBeans。 我安装了运行 ruby​​、rails 所需的所有软件包。我喜欢将 apache 用于 PHP,所以我决定继续使用 apache 安装 Phusion Passenger。我还为端口 3000 配置了一个虚拟主机(我也更改了 ports.conf)。
我想我配置一切正常,但是,我在 NetBeans 中创建了一个新项目(我保存在 var/www,与 PHP 文件相同的文件夹中),然后用 firefox 打开该项目。 我在公共文件夹中创建了一个名为 test.rb 的新文件。 我运行到这个 test.rb,但 Firefox 要求我下载文件,而不是运行它。

我认为 ruby​​、rails 是完全配置好的。而且我认为我的 apache2 设置没有问题。 那么,我怎样才能运行我的 ruby​​ 项目呢?我可以运行 .erb、.rhtml,但是运行代码,他向我展示了代码;s

谢谢。 (对不起英语)

【问题讨论】:

  • 你试过 mod_ruby 了吗?
  • 是的,我安装了 libapache2-mod-ruby

标签: ruby-on-rails ruby apache


【解决方案1】:

如果您在 Rails 应用程序的公用文件夹中,则无法运行 ruby​​ 脚本(必须先从应用程序的其他地方明确引用它,否则无论如何您都应该这样做,这可能是一个安全漏洞),它不像 PHP,点击实际文件会呈现结果。

当请求到达 Rails 应用程序时,它将通过路由器重定向(请参阅 config/routes.rb ),如果您想在 Rails 应用程序中执行 ruby​​ 代码,您需要先将其路由到控制器。

你可以通过运行命令来做到这一点

rails generate scaffold/resource test 

(只需scaffoldresource 选项之一)

这将创建您开始服务请求所需的所有样板代码(并将路由添加到您的路由文件)。

只有静态资源(html、图像等)将通过公共文件夹提供。这就是为什么所有的 CSS 和 JS 都存储在公共端的原因。

如果您想编写一个响应服务器请求的纯 ruby​​ 应用程序,您需要将其编写在自己的应用程序结构中,而不是在 Rails 应用程序中。

【讨论】:

    【解决方案2】:

    斯卡尼是对的,我再补充一点。

    /var/www 是 apache 用于提供内容的目录,而不是 rails。您可以使用该目录从您的 Web 服务器提供非 Rails 内容,同时使用 Rails 框架提供 Rails 内容。要设置您的 rails 项目,请运行 rails generate 命令(适用于 rails3),如 scaney 所示(或按照那里的众多教程之一进行操作)。

    【讨论】:

      【解决方案3】:

      我也使用 Ubuntu 进行 Rails 开发。最好使用开发服务器进行开发。我在主机上使用Passenger作为生产环境。

      在可以避免的情况下使用 Apache 启动 Rails 程序确实违背了“关注点分离”的目的。

      此外,您将需要开发服务器的详细输出来调试您的 Rails 应用程序。

      【讨论】:

        【解决方案4】:

        Ruby 的运行方式与运行 PHP 脚本的方式不同。使用 Ruby 和 Rails,您需要运行一个运行您的代码的应用程序服务器。对于 Rails,这就像在项目根目录中运行 rails server 一样简单(对于 Rails 3,./script/server 对于 Rails 2)。这将启动一个在端口 3000 上运行的服务器,因此请转到 http://localhost:3000/ 以查看您的应用。

        【讨论】:

          最近更新 更多