Ruby on rails Capistrano重新启动Apache服务器

Ruby on rails Capistrano重新启动Apache服务器,ruby-on-rails,apache,unix,amazon-ec2,capistrano,Ruby On Rails,Apache,Unix,Amazon Ec2,Capistrano,我对Capistrano和我的rails应用程序有问题。我的部署有一个简单的rake任务: task :restart do on roles(:app), in: :sequence, wait: 5 do execute "cd #{current_path}; rake assets:precompile" execute "sudo service httpd restart" end end 如您所见,在上传所有代码后,我将预编译我的资产

我对Capistrano和我的rails应用程序有问题。我的部署有一个简单的rake任务:

 task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      execute "cd #{current_path}; rake assets:precompile"
      execute "sudo service httpd restart"
    end
  end
如您所见,在上传所有代码后,我将预编译我的资产并尝试重新启动服务器。出于某种原因,这过去可以正常工作,但现在给了我一个错误:

DEBUG [e2f1f3dc] Command: sudo service httpd restart
DEBUG [e2f1f3dc]    sudo
DEBUG [e2f1f3dc]    : 
DEBUG [e2f1f3dc]    sorry, you must have a tty to run sudo
有没有办法解决这个问题


编辑:如果您想知道,capistrano以“ec2用户”身份登录的用户具有amazon分配给它的所有默认值。

ssh到服务器,然后发出以下命令:

visudo
然后注释掉以下行:

#Default requiretty
如果多个用户登录到系统(坏主意,部署系统应该由程序管理),更好的解决方案是为特定用户禁用TTY,如下所示:

Defaults requiretty
Defaults:%build !requiretty
Defaults:build !requiretty

第一行使TTY对每个人都是强制性的。第二行和第三行分别将构建组和用户排除在该要求之外。

您使用的是什么操作系统?我在搜索google时读到过这一点,但这是否存在安全风险?如果多人连接到该系统,则是。在这种情况下,您希望默认行为是要求TTY存在,并从需求中排除特定的USR或组。