【发布时间】:2011-11-26 00:48:10
【问题描述】:
我正在开发 Rails v2.3 应用程序。并在 Ubuntu 机器上使用 MySQL v5.1。
我有一个 rake 任务来stop 和 start mysql 数据库,如下所示:
namespace :db do
task :some_db_task => :environment do
...
exec 'sudo /etc/init.d/mysql stop'
...
exec 'sudo /etc/init.d/mysql start'
end
end
正如您在上面的代码中看到的,我使用sudo 来确保命令被执行。但是,由于这个sudo,当我运行 rake 任务时,会提示我输入 root 密码,尽管 rake 任务运行成功。
我想避免密码输入的事情,所以我想我可以执行shell命令首先更改为root用户,然后停止/启动MySQL,所以我将代码更改为:
namespace :db do
task :some_db_task => :environment do
...
exec 'sudo su'
exec '/etc/init.d/mysql stop'
...
exec '/etc/init.d/mysql start'
end
end
看,我添加了sudo su 命令首先运行。现在我再次运行我的 rake 任务,但是,令人惊讶的是,rake 任务运行到 exec 'sudo su' 然后它停止了,其余代码甚至没有运行。为什么?如何摆脱它?
(一般情况下,我不想在 MySQL 启动和停止的 rake 任务期间输入 root 密码)
【问题讨论】:
-
sudo su将生成一个交互式终端为root,并等待您使用它。你试图以错误的方式解决你的问题,如果你需要root权限,你将需要一个密码(或者你的设置非常不安全)。 -
sudo su是一种奇怪的说法sudo -s
标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1