Rails Capistrano 部署失败

Rails deployment with Capistrano failing

我对 RoR 和将此类应用程序部署到生产中还很陌生,所以我一直在阅读大量书籍。

有一个问题我似乎无法解决。在我的调查过程中,我在 SO 上发现了一个线程,它表明 Capistrano v3.x 的行为发生了变化,这让一些人感到困惑。

线程详细要做的一件事是实现远程文件检查,如果在部署期间不存在,则声明要上传的本地文件(这是我的解释)。

以下已添加到我的 config/deploy.rb:

namespace :deploy do
  namespace :check do
    task :linked_files => 'config/database.yml'
  end
  remote_file 'config/database.yml' => '/home/ubuntu/workspace/config/database.yml'
...
end

我在 Cloud9 IDE 中工作。当我 运行 cap production deploy 命令时,返回部署日志的以下摘录:

INFO [5cccd59b] Running /usr/bin/env mkdir -pv /home/deploy/--------/shared/config as deploy@---------------.com
DEBUG [5cccd59b] Command: /usr/bin/env mkdir -pv /home/deploy/--------/shared/config
INFO [5cccd59b] Finished in 0.068 seconds with exit status 0 (successful).
DEBUG [bd9797ee] Running /usr/bin/env [ -f /home/deploy/--------/shared/deploy:config/database.yml ] as deploy@---------------.com
DEBUG [bd9797ee] Command: [ -f /home/deploy/--------/shared/deploy:config/database.yml ]
DEBUG [bd9797ee] Finished in 0.067 seconds with exit status 1 (failed).
INFO Uploading /home/ubuntu/workspace/config/database.yml to /home/deploy/--------/shared/deploy:config/database.yml
DEBUG Uploading /home/deploy/--------/shared/deploy:config/database.yml 0.0%
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as deploy@---------------.com: scp: /home/deploy/--------/shared/deploy:config/database.yml: No such file or directory

我不知道 100%,但在我看来,它使用 : 自动插入的路径正在丢弃脚本。

感谢任何指导!

提前致谢,

加布里亚尔

您的共享目录中缺少一个 database.yml 文件。此外,值得注意的是,如果您一直在开发环境中工作,则还必须为生产环境配置 database.yml 文件。检查以确保 *yml 未在您的 .gitignore 文件中列出。

这是一个示例生产条目:

production:
  adapter: mysql2
  database: production_for_my_app
  username: root
  password: ''
  host: localhost

尽管您可能已将 database.yml 文件签入版本控制,但在您的情况下,您需要在应用程序外部的共享目录中拥有一个文件。

为此,请通过 SSH 连接到您的盒子

cd /home/rails/< your app >/shared/config

然后制作 database.yml 文件

touch database.yml

nano database.yml

然后将您在版本控制中的 database.yml 副本的内容复制并粘贴到您刚刚创建的 database.yml 文件中。

保存文件,一切顺利。

你应该在没有任何命名空间的情况下调用 remote_file

namespace :deploy do
  namespace :check do
    task :linked_files => 'config/database.yml'
  end
...
end

remote_file 'config/database.yml' => '/home/ubuntu/workspace/config/database.yml'