停止启动数据库

时间:2011-11-25 13:28:26

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我正在开发Rails v2.3应用程序。并使用MySQL v5.1。

我需要在 rake任务停止启动 mysql数据库,但我不确定如何实现此功能,有人可以帮助我吗?

namespace :db do
  task :some_db_task => :environment do
       #shut down mysql
       ...
       #start mysql 
  end
end

顺便说一下,我正在开发 Ubuntu 机器。

----------------------- update -------------------- --------

我试过exec "/etc/init.d/mysql stop",我收到以下错误消息:

Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mysql stop

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) utility, e.g. stop mysql
stop: Rejected send message, 1 matched rules; type="method_call", sender=":1.78" (uid=1000 pid=6331 comm="stop) interface="com.ubuntu.Upstart0_6.Job" member="Stop" error name="(unset)" requested_reply=0 destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")) 

我也在命令行上尝试/etc/init.d/mysql stop,同样的错误提升,

按照错误消息的说明,然后我尝试了service mysql stop,我收到了一条新的错误消息:

stop: Rejected send message, 1 matched rules; type="method_call", sender=":1.79" (uid=1000 pid=6343 comm="stop) interface="com.ubuntu.Upstart0_6.Job" member="Stop" error name="(unset)" requested_reply=0 destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init"))

为什么我无法阻止mysql?

--------------- update 2 -------------------------

我意识到即使上面提到的错误消息显示,sudo /etc/init.d/mysql stop实际上已完成其工作。此命令使MySQL 停止,同时消息提升。

3 个答案:

答案 0 :(得分:0)

或许类似以下内容?

namespace :db do
   task :start do
     exec "sudo /etc/init.d/mysqld start"
   end

   task :stop do
     exec "sudo /etc/init.d/mysqld stop"
   end
end

答案 1 :(得分:0)

我更喜欢使用system(“sudo /etc/init.d/mysqld stop”),因此您可以确保数据库已停止运行。 system()等待exec启动后台线程时执行的命令。

@update你可能需要“sudo service mysql stop”如果你使用的是ubuntu lucid或更新

答案 2 :(得分:-1)

你可以使用exec方法在ruby中执行shell命令,如下所示

exec "/etc/rc.d/init.d/mysqld start"  #start mySql
exec "/etc/rc.d/init.d/mysqld stop"  #stop mySql