1

在我们升级到 Rails 4 和 Cap 3.1 之前,以下任务正在运行

desc 'Restart application'
task :restart do
  on roles(:web), in: :sequence, wait: 5 do
    execute :touch, release_path.join('tmp/restart.txt')
  end
end

首先,我知道 Cap 3.1 不再隐式调用 :restart 所以我添加了以下内容:

after :publishing, :restart

但是,尝试“触摸”restart.txt 文件以使 Apache 重新加载应用程序时失败。

cap aborted!
touch stdout: Nothing written
touch stderr: Nothing written
config/deploy.rb:46:in `block (3 levels) in <top (required)>'
config/deploy.rb:45:in `block (2 levels) in <top (required)>'
Tasks: TOP => deploy:restart
(See full trace by running task with --trace)
The deploy has failed with an error: #<SSHKit::Command::Failed: touch stdout: Nothing written
touch stderr: Nothing written
>

我还需要重新启动吗?通常看起来没问题,但我想知道是否会因为找不到方法而出现问题。

4

4 回答 4

15

有一个类似的问题,试图在服务器上运行这个命令并得到一个错误 touch: cannot touch 'myappdir/releases/20140416074158/tmp/restart.txt': No such file or directory,所以我只是添加了一行来创建一个release_path/tmp目录:

desc 'Restart application'
task :restart do
  on roles(:web), in: :sequence, wait: 5 do
    execute :mkdir, '-p', "#{ release_path }/tmp"
    execute :touch, release_path.join('tmp/restart.txt')
  end
end
于 2014-04-16T07:57:55.400 回答
3

失败的错误信息是什么?

这对我有用:

namespace :deploy do

  desc 'Restart application'
  task :restart do
    on roles(:app, :web), in: :sequence, wait: 5 do
      execute :touch, release_path.join('tmp/restart.txt')
    end
  end
end

after 'deploy:publishing', 'deploy:restart'
于 2014-03-18T20:03:30.923 回答
2

我已经修改了给定的答案以显示对我有用的解决方案

我刚刚在config/deploy.rb文件末尾输入了下一行。

namespace :deploy do
  desc 'Restart application'
  task :restart do
    on roles(:web), in: :sequence, wait: 5 do
      execute :mkdir, '-p', "#{ release_path }/tmp"
      execute :touch, release_path.join('tmp/restart.txt')
    end
  end

  after :deploy, "deploy:restart"
  after :rollback, "deploy:restart"
end

这样做,Passenger 将在每次部署/回滚后自动重启。

我认为值得一提的是,您还可以在每次运行下一行时从开发环境中手动重新启动Passenger:

cap production deploy:restart
于 2016-02-05T04:02:56.097 回答
0

在我的上限上,我在多服务器部署中遇到了类似的错误。似乎问题在于它依赖于您在重新启动之前运行先前的 rails 命令(生成 tmp 目录),例如 db:migrate。

于 2014-12-09T22:05:50.863 回答