【问题标题】:Deploying rails app on separate app server and database server (both Linode)在单独的应用服务器和数据库服务器(均为 Linode)上部署 Rails 应用
【发布时间】:2013-05-06 19:45:54
【问题描述】:

我在将基本的 rails 应用程序(在本地机器上运行,在 heroku 上运行)部署到分布式架构(一个机器上的 Web 服务器,另一个机器上的数据库服务器)时遇到问题。

这是我的问题。 Capistrano 似乎无法更新我的数据库服务器上的缓存副本。

2013-05-12 11:32:57 executing `deploy:update_code'
updating the cached checkout on all servers
executing locally: "git ls-remote git@github.com:morgs32/treebook.git master"
command finished in 1658ms
* executing multiple commands in parallel
-> "else" :: "if [ -d /home/morgan/apps/treebook/shared/cached-copy ]; then cd  /home/morgan/apps/treebook/shared/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q --hard 73b5a632d417b3a6863d542b174b30077265bc7c && git clean -q -d -x -f; else git clone -q -b master git@github.com:morgs32/treebook.git /home/morgan/apps/treebook/shared/cached-copy && cd /home/morgan/apps/treebook/shared/cached-copy && git checkout -q -b deploy 73b5a632d417b3a6863d542b174b30077265bc7c; fi"
-> "else" :: "if [ -d /home/morgan/apps/treebook/shared/cached-copy ]; then cd /home/morgan/apps/treebook/shared/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q --hard 73b5a632d417b3a6863d542b174b30077265bc7c && git clean -q -d -x -f; else git clone -q -b master git@github.com:morgs32/treebook.git /home/morgan/apps/treebook/shared/cached-copy && cd /home/morgan/apps/treebook/shared/cached-copy && git checkout -q -b deploy 73b5a632d417b3a6863d542b174b30077265bc7c; fi"
servers: ["*app server ip*", "*database ip*"]
[*app server ip*] executing command
[*database ip*] executing command
** [*database ip* :: out] sh: 1: git: not found
command finished in 3072ms
*** [deploy:update_code] rolling back
* executing multiple commands in parallel
-> "else" :: "rm -rf /home/morgan/apps/treebook/releases/20130512183302; true"
-> "else" :: "rm -rf /home/morgan/apps/treebook/releases/20130512183302; true"
servers: ["*app server ip*", "*database ip*"]
[*app server ip*] executing command
[*database ip*] executing command
command finished in 201ms
failed: "sh -c 'if [ -d /home/morgan/apps/treebook/shared/cached-copy ]; then cd /home/morgan/apps/treebook/shared/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q --hard 73b5a632d417b3a6863d542b174b30077265bc7c && git clean -q -d -x -f; else git clone -q -b master git@github.com:morgs32/treebook.git /home/morgan/apps/treebook/shared/cached-copy && cd /home/morgan/apps/treebook/shared/cached-copy && git checkout -q -b deploy 73b5a632d417b3a6863d542b174b30077265bc7c; fi'" on *database ip*

当然,无论您在哪里看到 app 服务器 ip数据库 ip,我都有这些服务器的实际 ip。有什么想法吗?

【问题讨论】:

  • 您的 capistrano 部署可能不需要与您的数据库框对话,您可以从 web 服务器上的 rails 应用程序运行迁移(只要 database.yml 设置正确)
  • 查看stackoverflow.com/questions/9781767/…了解更多关于数据库角色的信息
  • 我想我尝试这个太早了。首先,我将使用 capistrano、nginx、postgres 和 railscast #335 确保它在单个机器上工作。一旦可行,我将再次解决这个问题(几天)。感谢您迄今为止提出的建议。

标签: ruby-on-rails ruby capistrano unicorn linode


【解决方案1】:

如果服务器位于同一个数据中心,您可以使用 Linode Manager 中列出的私有 IP 地址在两台服务器之间进行通信,而不会产生带宽成本。根据您的操作系统,您可能有一个软件防火墙,您需要打开端口以允许通信。

查看https://library.linode.com/remote-access#sph_adding-private-ip-addresses,如果您还没有设置,请查看有关如何添加 IP 地址的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    相关资源
    最近更新 更多