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'
我对 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'