我正在开发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 停止,同时消息提升。
答案 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