我应该在Heroku上部署我的Ruby on Rails应用程序吗?

9
关于我自己的介绍。我今年24岁,去年从NC State获得了分析学硕士学位。统计学、数学等方面是我的专业。我没有很强的编程背景,这对我的问题来说非常重要。如果我说的话不太合理,那就是为什么。毕业以来,我一直和其他几个人全职开发Rails应用程序。我的编程经验主要是Ruby on Rails(1.2年)。我也懂R、SAS(统计语言,但对这个问题没有帮助)。
显然,这意味着我们已经开发了一年多,但还没有完成。主要开发人员是一名优秀的程序员,只是他已经有一份全职工作,抽空做这个应用程序。由于他最近没有足够的时间,我几乎全权负责这个应用程序。
我们现在已经将它部署在Slicehost上。 应用程序已经达到了我们不需要编写任何其他内容的程度(除非我们想到更多功能)。 我询问是否应该迁移到Heroku的原因是因为我觉得Heroku是一个简单的平台可以进行部署。 对我来说,Slicehost似乎太复杂了。 另一位开发人员处理了它,而不是我。 我看了看如何在Heroku上部署应用程序,看起来我能做到。 如果需要扩展我们的应用程序,则需要Heroku提供的扩展能力。 就金钱而言,我会从最低限度(免费)开始,看看怎么样。 如果需要,我可以支付额外的功能。
我们正在使用Redmine进行项目管理和存储库(不是git,我认为我们需要在Heroku上使用git)。 git是否类似于Redmine? 它是否容易使用?
现在,在Slicehost上,我们有4个守护程序(不断运行的进程)。 我们有8个延迟工作程序。 我知道启动守护程序和延迟工作程序的命令行。 这些在Heroku上工作吗?
我想知道我是否仍然可以在Heroku上使用RAILS_ENV = production script / console。
用户界面是一个JavaScript文件。在开发模式下,如果我在终端中执行script/server,并在浏览器中转到http://localhost:3000,我就可以看到它。Heroku会按照我想要的方式加载这个页面吗?
我们为应用程序拥有一个工作网站,具有自己的域名。我不太清楚DNS是什么,所以我可能无法将Heroku应用程序链接到它,除非有一种简单的方法。我认为Heroku将其链接到appname.heroku.com作为默认设置。
根据我的编程经验,如果我找到另一份工作,使用Heroku是否足够容易,或者我应该切腹?

是的,所有您的关注点都得到了覆盖 :) - tybro0103
1
应用程序已经到了一个我们不需要再编写任何其他代码的地步。-臭名昭著的最后一句话 - Brian
Heroku很好,但我推荐OpenShift - 在这里看到我的帖子 https://dev59.com/Z2Mm5IYBdhLWcg3wTtfi - Oz Ben-David
5个回答

6

是的,你绝对应该在Heroku部署你的应用程序。要做到这一点,你需要执行以下操作:

  1. Make sure you have git installed in your computer
  2. Create a heroku account here
  3. Install the heroku gem and do the rest as mentioned in this page
  4. Track your application with git, and create your heroku application as shown here
  5. After you do this, heroku will provide you with a URL for your application, such as http://blah-bleep-123.heroku.com. Now, the next step would be to associate your domain to this heroku URL.
  6. Configure your domain DNS Server as shown in this page. Mind you, after you change your DNS, it might take upto 48 hours for it to work. You can change your domain DNS by logging into the site where you bought your domain, for e.g. godaddy.com, hostingdude.com, etc.
  7. Add this code to your ApplicationController. You can follow this from this page as well

    class ApplicationController
      before_filter :ensure_domain
    
      APP_DOMAIN = 'www.mydomain.com'
    
      def ensure_domain
        if request.env['HTTP_HOST'] != APP_DOMAIN
          # HTTP 301 is a "permanent" redirect
          redirect_to "http://#{APP_DOMAIN}", :status => 301
        end
      end
    end
    
  8. Make sure you migrate all your database in heroku, by doing heroku rake db:migrate
  9. After you have completed all these steps, you should be good. Check out your domain URL, everything should work pretty :).
  10. If you see any errors in your page, you can view the log by heroku logs
  11. You can access console as heroku console
有了这些功能,Heroku非常方便使用。
如果需要更多帮助,请告诉我。

我不小心提前提交了,无法完成编辑。在Heroku上有没有使用特定版本的某些gems的方法? - Eric
另外,我无法访问控制台:heroku console 您的应用程序太忙了,无法打开控制台会话。 控制台会话需要一个开放的 dyno 用于执行。我以为它附带了一个免费的 dyno。我需要做些什么来设置它吗? - Eric
在Heroku上,您不需要安装任何gems。您只需确保您的计算机中有所有gems,然后在Gemfile中包含必要的gems,然后执行bundle install。然后,当您将应用程序推送到Heroku时,它将为您的应用程序下载所有必要的gems。 - rookieRailer
我已经成功安装了bundle,并暂时跳过了DNS部分。我执行了heroku rake db:migrate,但出现了以下错误:rake aborted! /app/app/models/application_record.rb:25: invalid multibyte char (US-ASCII) /app/app/models/application_record.rb:25: invalid multibyte char (US-ASCII) /app/app/models/application_record.rb:25: syntax error, unexpected $end, expecting keyword_then or ';' or '\n' ...!= "~" && params[:index] != "∞" && params[:index] != "infi... ...在本地执行rake db:migrate时没有收到此消息。我看到了无限大符号,但它并不存在于我的代码中。我该怎么办? - Eric
我删除了带有 && params[:index] != "∞" 的部分,Heroku 通过了 rake db:migrate。 - Eric
显示剩余3条评论

3
我认为你应该认真考虑使用Heroku。我在周末项目中使用过它,在工作中也很成功地使用了它。部署非常容易,你不必担心设置和系统管理(大部分情况下)。添加模块和“按需付费”非常简单。
至于你的需求,我相信你可以在Heroku上运行Redmine本身,因为它是一个Rails应用程序。唯一的问题是你提到你将Redmine用作“仓库”,我不确定你的意思,因为Redmine不是版本控制系统。Redmine具有各种VCS(SVN、git、Mercurial、CVS等)的集成点。是的,Heroku使用git,这就是你需要使用它来推送代码到服务器的原因。如果你熟悉Mercurial,那么它非常类似。
对于延迟任务,Heroku提供免费的定时作业,每天运行一次,每小时运行一次需要收费(请参见cron add-on)。还有一个延迟作业插件(请看这里),但我没有任何经验。
你应该能够访问Rails控制台(请参阅Heroku文档)。只需运行“heroku console”,然后你就在那里了。
如果你的应用程序通过运行脚本/服务器来工作,它也应该可以在Heroku中直接使用。
至于DNS,让它与你的自定义域名配合使用并不难。开箱即用,你可以使用appname.heroku.com访问你的应用程序,要设置你的自定义域名,请查看这里的Heroku文档,但基本上你需要添加自定义域名附加组件(免费,除非你想要子域),配置Heroku响应你的域的请求(几个简单的命令)并设置你的DNS提供商指向Heroku(文档中甚至有一个短视频介绍如何在GoDaddy中完成此操作)。
我看到的唯一缺点是,如果你的应用程序在长时间内没有接收到任何流量,实例会进入“休眠”状态,导致下一个请求到达时有些缓慢(有时甚至超时),但一旦实例醒来,一切都很顺利。
总的来说,我认为Heroku是一个很好的方式,可以让你作为开发人员减轻很多负担,许多东西都很容易实现,而不必深入设置服务器的细节。缺点是:一旦你开始增长,它可能会变得有点昂贵,但嘿,如果你正在增长,那么你现在可能有资金雇用可以处理这些细节的人了。

您可能还想看一下这篇博客文章,其中比较了Slicehost和Heroku。

祝你好运!


1
“去睡觉”问题可以使用 Pingdom 的免费版本来解决 :) - Brian

3

没问题,就这么做吧。

如果你一直靠自己的“编程经验”来完成任务,那么你会做得很好。要有信心,开始创作!引用Paul Graham的话:

快速发布产品的原因并不是将产品尽早推向市场很关键,而是在你发布之前你还没有真正开始努力。发布教会你应该构建什么。如果你不知道这个,你就浪费了时间。所以你发布的任何东西的主要价值都是作为吸引用户的借口。

你提出的功能很容易复制,并且文档齐全,而且免费开始使用。你还能要求什么呢?


1

是的,请去做。

它是一个良好的部署环境,具有快速和易于扩展的特点。即使您只是用于测试或演示,它也提供每个应用程序1个dynos的免费帐户使用。

可以根据您的需求添加可用的附加工具列表。


1

如果你有空闲时间,不妨注册一个免费账户并试一试。

然而,这将会带来一些相当严重的头疼问题。

版本控制是其中之一,因为 Heroku 使用 Git,但另一个还没有人提到的问题是,你的12个进程(在 Heroku 中称为“dynos”)每月会花费你 $35 * 11 = $385!你可以设置每小时 $3/月的 Cron 任务来清空 delayed_job 队列(而不是始终运行 worker),但这是否足够?(如果你正在运行 8 个 worker,我猜肯定不够)。这可能需要一些代码更改。

一旦你把它设置好了,部署和管理非常容易(几乎不存在),但如果你开始需要新功能,它会花费你一些钱。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接