新手问题 求助,capistrano3.0.1 部署出现问题

tsaikoga · 2013年12月17日 · 最后由 ken 回复于 2014年08月15日 · 4347 次阅读

以前没有部署过,如今遇到如下问题: 我在 Capfile 中有加入引入 capistrano/rvm, capistrano/bundler, capistrano/rails

在我的 deploy.rb 文件中,若加入如下代码: set :linked_files, %w{config/database.yml}

会出现以下错误: ERROR linked file /root/www/XXX/shared/config/database.yml does not exist 若去掉那行代码,不会有错,但是执行到 INFO -- net.ssh.connection.session[43f55c6]: channel_success: 1 就停住了。

并且查看服务器只生成了如下几个目录和其子目录: /release; /repo;/shared 没有 current/目录,而且 shared/目录中无 config/database.yml 这是怎么回事?

set :linked_files, %w{config/database.yml} 那行的意思和你理解的刚好相反,它是把 shared/config/database.yml link 到你的 release folder 里面去。

#1 楼 @zillou 但是 release 是 git 上的代码,而我把其中的 database.yml 给 gitignore 了,这样,就链接不到了是吧,也就是说这句不能用了,得自己写。

@tsaikoga 你可以在之前某个步骤把你的 database.yml copy 到 shared/config 里面去。或者你自己先在 shared/config 里面把文件都准备好。

如果你去掉这样一句的话,以后你的项目里面的 database.yml 都无法自动设置了,所以这句还是很有用的。

#3 楼 @zillou 我试过在 bundler:install 之前让建立一个软链接 config/database.yml 指向 config/database_example.yml,但是它还是执行到 INFO -- net.ssh.connection.session[43f55c6]: channel_success: 1 就停住了。服务器还是没有生成 current/目录

我不知道 INFO -- net.ssh.connection.session[43f55c6]: channel_success: 1 这个是怎么产生的。你仔细看看前面的 log,看看是怎么到这一步的吧。

我只觉得过 linked_files 的做法应该不是你那个样子处理的。 因为用 database_example.yml 就是为了保护敏感信息,那么 database_example.yml 肯定不能是真正的连接数据库的配置。所以,我处理 linked_files 那个问题的方法是,先将真正的 database.yml 放到 shared/config 里面就行了,database_example.yml 我不会去管他

shared folder 下面不是放软连接的,而是存放真正的文件,然后 capistrano 会将其连接到每个 release 里面去。

最简单的办法是,首先在 shared/config/里面手工写 database.yml 文件。 这个文件一经写入,就不会更改。

cap 每次会在 current/config/database.yml 与这个文件之间建立 link,这个就不用担心了。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号