【问题标题】:Ruby On Rails deployment - what version of RoR should I use? [closed]Ruby On Rails 部署 - 我应该使用哪个版本的 RoR? [关闭]
【发布时间】:2012-01-22 22:46:21
【问题描述】:

我是 Ruby on Rails 的新手,在部署 RoR 应用程序时遇到了一些问题。

编辑 1:试图缩小问题范围。我不确定我在部署基本 Ruby 应用程序时遇到的问题是由于我的错误设置和编码,还是由于我当前使用的 Ruby on Rails 版本存在冲突。

改写问题:我应该使用哪个版本的 Ruby on Rails?作为框架的新手,我只希望我的部署过程尽可能顺利。如果 3.2 是官方下载(截至 2012 年 1 月 20 日)是否可以安全使用,然后我应该使用最新的稳定版 Ruby(1.9.3-p0)吗?书籍和著作中提到的宝石呢?我应该始终使用最新的吗?

旧讨论


我关注Ruby On Rails Tutorial。按照书中的说明,我尝试在Heroku 上进行部署,但没有成功。 Heroku 日志的打印输出:

2012-01-22T18:26:09+00:00 app[web.1]: Started GET "/pages/about" for 90.231.141.39 at  
2012-01-22T18:26:09+00:00 app[web.1]: cache: [GET /pages/about] miss
2012-01-22T18:26:09+00:00 app[web.1]: ActiveRecord::ConnectionNotEstablished   
(ActiveRecord::ConnectionNotEstablished):

此时此应用程序不使用任何数据库(仅显示静态页面)。所以对我来说,ActiveRecord 错误并不意外。不确定这是否是问题的根源。我首先认为这个问题是 Heroku 的问题,因为我的 rails server 部署工作正常,但我发现 rails server -e production 命令可以在生产环境中运行 rails 服务器。在 Rails 3.1.3 下,这可以正确呈现页面,但我仍然在服务器日志中收到以下错误消息:

sample_app$ rails server -e production
=> Booting WEBrick
=> Rails 3.1.3 application starting in production on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2012-01-22 23:07:28] INFO  WEBrick 1.3.1
[2012-01-22 23:07:28] INFO  ruby 1.9.3 (2011-10-30) [x86_64-darwin11.2.0]
[2012-01-22 23:07:28] INFO  WEBrick::HTTPServer#start: pid=57161 port=3000
cache: [GET /] miss
cache: [GET /pages/about] miss
Started GET "/pages/about" for 127.0.0.1 at 2012-01-22 23:09:50 +0100
Processing by PagesController#about as HTML
Rendered pages/about.html.erb within layouts/application (2.0ms)
Completed 200 OK in 24ms (Views: 24.2ms | ActiveRecord: 0.0ms)
cache: [GET /assets/application-cd728f3a08415c27ca2e753d30091c74.css] miss

在我看来,存在某种路由问题。但是我对 RoR 缺乏知识和经验,这让我在寻找实际错误时成为跛脚鸭。

升级到 Rails 3.2.0 使问题变得更糟。我为 Rails 3.2 制作了一个示例应用程序,基本上是:

rails new test_app

进入“test_app”文件夹并运行rails server -e production(使用Ruby 1.9.3-p0)。这次甚至没有呈现默认的 Ruby on Rails 索引页面。服务器日志给了我:

heroku_test$ rails server -e production
=> Booting WEBrick
=> Rails 3.2.0 application starting in production on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2012-01-22 23:19:07] INFO  WEBrick 1.3.1
[2012-01-22 23:19:07] INFO  ruby 1.9.3 (2011-10-30) [x86_64-darwin11.2.0]
[2012-01-22 23:19:07] INFO  WEBrick::HTTPServer#start: pid=63242 port=3000
cache: [GET /] miss

所以,在所有情况下,我的路由、缓存或 wathever 似乎都有一些问题。

这些是我的规格:

System specs: Mac OS X Lion 10.7.2
Ruby: 1.9.3-p0
Rails: 3.1.3 (and also 3.2.0 release the other day)

我非常清楚这些规范并不是 Ruby on Rails 教程所建议的。编写 RoR 教程时考虑了以下规范:

Ruby: 1.9.2 (or 1.8.7)
Rails: 3.0.11

chapter 13 中,Hartl 解释了与 Rails 3.1.x 的不同之处,并提供了 sample_app 的升级指南。我已经浏览了这一章(因为我被困在第 3 章),但无法找到解决问题的方法。

我的问题到底是什么?

对于在我的系统上运行的 RoR 版本,如何将 RoR 应用部署到生产环境?

目前我浏览过的相关链接和资源,除了 RoR.org 和 Heroku.com 上的常规页面:

cache: [GET /] miss? dalli gem, memcached, rails 3.1, nginx, unicorn production environment

How does one load a CSS framework in Rails 3.1?

rails 3 tutorial: No route matches [GET] “/”

Rails 3.1 on Heroku Cedar

【问题讨论】:

  • 您的部署似乎奏效了,about.html.erb 渲染得很好(Rendered pages/about.html.erb within layouts/application (2.0ms) 证明了这一点)。真正的问题是什么?当您访问 about 的 URL 时,您是否看到有关未找到数据库的错误消息?您的问题不清楚。
  • 缓存未命中不是错误消息,也不会在任何地方显示“错误”。你说它渲染正确(在3.1下)。真正的问题是什么?
  • 您没有描述任何“严重问题”,而且看起来它正在以应有的方式工作。如果你真的想知道“如何部署到生产环境”,这里有数百个问题和互联网上的 HOWTOs。就目前而言:太笼统了。
  • 嗯...我猜这可能是一般情况。潜入一组新工具时的正常问题。我会尝试缩小范围,编辑和改写......
  • @Zabba:我收到了 404 - 页面不退出消息。但是,我意识到我可能无法具体得到正确的答案。我会尝试找出一个更好的问题。

标签: ruby-on-rails ruby deployment heroku production


【解决方案1】:

现在问题变了:

“我应该使用哪个版本的 Ruby on Rails?作为框架的新手,我只希望我的部署过程尽可能顺利。”

如果您从一本书或教程中学习,请使用与该书/教程中的示例相同的版本。

“书籍和著作中提到的宝石呢?我应该始终使用最新的吗?”

大多数 gem 都依赖于其他 gem,因此您使用的确切版本通常取决于这些依赖项。有时您甚至可能在一个版本中发现错误,因此您切换到另一个版本来解决问题。或者,如果您正在学习使用某个版本的书籍/教程,您可能希望使用相同的版本(至少在您完成教程时)。但是,如果您没有充分的理由使用旧版本,那么通常您应该使用最新版本。

您学会如何使用 Bundler 了吗?它允许您控制要使用的每个 gem 的确切版本。

【讨论】:

  • 是的,bundler 是我的朋友。
  • 好的,你可以解决这个问题,让我回到正轨。猜猜我会在部署时提出新的(更具体的)问题。干杯!
【解决方案2】:

@jollyCocoa,您在部署到 Heroku 时遇到的错误是由于没有设置数据库造成的。即使您不使用数据库,如果您仍然配置数据库连接,它将修复此错误。但是,如果您从 RoR 开始,并且只是想尝试一些东西,那么此时不要尝试部署到 Heroku。只需从一个在本地运行的非常简单的应用程序开始,甚至只是由“rails new”生成的“骨架”应用程序,然后一次一小步地进行更改,在每个步骤中检查应用程序是否仍在运行。如果您遇到困难并且无法弄清楚如何让某个功能发挥作用,您可以发布更具体的问题。

【讨论】:

  • 我意识到我的问题有点不具体。你会争辩说我现在应该跳过部署,转而学习开发环境中的框架吗?我不希望最终陷入我在开发环境中学习了框架并且当我开始部署时我完全误解了一些基本概念的情况......
  • 是的,此时您最好只在本地工作。当您开始部署时,您需要学习一些新东西,但概念都是一样的。
  • 太棒了!那么,回到书本上……
猜你喜欢
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
相关资源
最近更新 更多