使用Capistrano的Rails部署失败

时间:2015-02-11 18:26:55

标签: ruby-on-rails deployment capistrano production

我对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%,但在我看来,它自动插入的路径是:抛弃脚本。

感谢任何指导!

提前致谢,

Gabrial

2 个答案:

答案 0 :(得分:1)

您在共享目录中缺少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文件中。

保存文件即可开展业务。

答案 1 :(得分:0)

您应该在没有任何名称空间的情况下调用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'