2009-01-25 72 views
1

对于RoR安装,有什么方法可以在没有root访问权限的情况下运行rake命令?运行耙子没有外壳访问?

换句话说,有什么办法可以让db:createdb:migrate在没有root权限的情况下运行(可能是自动或其他)?或者我可以从RoR controller运行rake命令吗?

回答

4

看看rails-2.X.X/lib/tasks/databases.rake,你可以看到创建,删除和迁移数据库的代码。

一旦rails环境被初始化,您可以使用rake任务文件中的代码来创建,删除和迁移。

我不知道在出现错误之前,您是否可以在控制器级别执行此操作,但您可以随时尝试。您也可以在rails完成环境文件初始化后执行此操作。

config/environment.rb

... 

ActiveRecord::Migration.verbose = false 
ActiveRecord::Migrator.migrate(File.join(Rails.root, 'db', 'migrate')) 
0

好吧,这是一个鸡鸡蛋问题,你可以在没有创建数据库的情况下启动你的RoR实例,但我怀疑它。如果您的托管服务提供商能够托管RoR应用程序,则必须有方法让他们为您运行rake或让您以某种方式运行它。

+0

我会检查一下。我认为RoR实例可能在没有创建数据库的情况下启动,事实上...只要我不呼叫需要它的控制器... – 2009-01-26 00:17:19

+0

不,没有问题,您可以在没有创建数据库的情况下启动RoRT正在运行... – 2009-01-26 03:18:37

0

既然它听起来像你遇到了创建数据库的麻烦,有没有办法从主机控制面板来做到这一点?不过,你将如何迁移你的数据库?听起来你可能需要看一个新的主机。我使用Slicehost,并认为他们是伟大的:)

+0

谢谢斯科特。创建数据库没有问题,也没有使用MySql转储脚本等进行迁移,但我宁愿不要打扰... – 2009-01-26 01:05:40

0

给这个代码试试:

require 'rake' 
require 'rake/testtask' 
require 'rake/rdoctask' 
require 'tasks/rails' 
Rake::Task["db:version"].invoke 

我只是试图在./script/console和工作。如果没有require行,它将无法正常工作。

我使用它从rake任务调用其他rake任务(当它不是预请求时,而是必须在中间发生时)。

请注意,这将不会得到任何命令的输出。如果你想,你可以只去好老反引号和运行这样的命令:

output = `rake db:version` 

那将启动另一个过程,但我不认为有问题这一点。

0

要说清楚的是,您不需要root访问权限,只需要shell(ssh)对该机器的访问权限即可。

如何在没有访问权的情况下部署它?如果您使用的是capistrano,而您已经拥有shell访问权限,并且可以为您运行这些任务。