【发布时间】:2009-01-25 23:57:19
【问题描述】:
对于 RoR 安装,有没有办法在没有 root 访问权限的情况下运行 rake 命令?
换句话说,有没有办法让db:create 和db:migrate 在没有root 访问权限的情况下运行(可能是自动或其他什么)?或者我可以从 RoR controller 运行 rake 命令吗?
【问题讨论】:
标签: ruby-on-rails shell rake
对于 RoR 安装,有没有办法在没有 root 访问权限的情况下运行 rake 命令?
换句话说,有没有办法让db:create 和db:migrate 在没有root 访问权限的情况下运行(可能是自动或其他什么)?或者我可以从 RoR controller 运行 rake 命令吗?
【问题讨论】:
标签: ruby-on-rails shell rake
查看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'))
【讨论】:
嗯,这有点像鸡蛋问题,您可以在不创建数据库的情况下启动您的 RoR 实例,但我对此表示怀疑。如果您的托管服务提供商能够托管 RoR 应用程序,那么他们必须有办法为您运行 rake 或让您以某种方式运行它。
【讨论】:
听起来您在创建数据库时遇到了麻烦,有没有办法从主机控制面板进行操作?不过,您将如何迁移数据库?听起来你可能需要看看一个新的主机。我使用 Slicehost 并认为它们很棒:)
【讨论】:
试试这个代码:
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`
这将启动另一个进程,但我认为这没有问题。
【讨论】:
需要说明的是,您不需要 root 访问权限,您只需要对该计算机的 shell (ssh) 访问权限。
您如何在没有访问权限的情况下部署它?如果您使用的是 capistrano,那么您已经拥有 shell 访问权限,它可以为您运行这些任务。
【讨论】: