1

对于 RoR 安装,有没有办法在rake没有 root 访问权限的情况下运行命令?

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

4

5 回答 5

4

看一下rails-2.X.X/lib/tasks/databases.rake,您可以看到调用来创建、删除和迁移数据库的代码。

初始化环境后,您可以使用railsrake 任务文件中的代码来创建、删除和迁移。

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

config/environment.rb

...

ActiveRecord::Migration.verbose = false
ActiveRecord::Migrator.migrate(File.join(Rails.root, 'db', 'migrate'))
于 2009-01-26T00:23:43.177 回答
0

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

于 2009-01-26T00:14:09.017 回答
0

由于听起来您在创建数据库时遇到了麻烦,有没有办法从主机控制面板中做到这一点?不过,您将如何迁移数据库?听起来你可能需要看看一个新的主机。我使用 Slicehost 并认为它们很棒:)

于 2009-01-26T00:18:53.907 回答
0

试试这个代码:

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

我刚试了一下./script/console,效果很好。require没有线条就行不通。

我用它从 rake 任务中调用其他 rake 任务(当它不是 pre-req 而是必须在中间发生的事情时)。

请注意,这不会为您提供命令的任何输出。如果您愿意,您可以使用旧的反引号并运行如下命令:

output = `rake db:version`

这将启动另一个进程,但我认为这没有问题。

于 2009-01-26T04:19:16.150 回答
0

需要明确的是,您不需要 root 访问权限,您只需要对该计算机的 shell (ssh) 访问权限。

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

于 2009-01-27T14:43:27.187 回答