对于 RoR 安装,有没有办法在rake
没有 root 访问权限的情况下运行命令?
换句话说,有没有办法在没有 root 访问权限的情况下获取db:create
和db:migrate
运行(可能是自动的或其他的)?或者我可以rake
从 RoR 运行命令controller
吗?
对于 RoR 安装,有没有办法在rake
没有 root 访问权限的情况下运行命令?
换句话说,有没有办法在没有 root 访问权限的情况下获取db:create
和db:migrate
运行(可能是自动的或其他的)?或者我可以rake
从 RoR 运行命令controller
吗?
看一下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 任务(当它不是 pre-req 而是必须在中间发生的事情时)。
请注意,这不会为您提供命令的任何输出。如果您愿意,您可以使用旧的反引号并运行如下命令:
output = `rake db:version`
这将启动另一个进程,但我认为这没有问题。
需要明确的是,您不需要 root 访问权限,您只需要对该计算机的 shell (ssh) 访问权限。
您如何在没有访问权限的情况下部署它?如果您使用的是 capistrano,那么您已经拥有 shell 访问权限,它可以为您运行这些任务。