没有外壳访问运行耙?

时间:2009-01-25 23:57:19

标签: ruby-on-rails shell rake

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

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

5 个答案:

答案 0 :(得分: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'))

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分: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`

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

答案 4 :(得分:0)

为了清楚起见,您不需要root访问权限,只需要shell(ssh)访问该计算机。

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