对于RoR安装,有没有办法在没有root访问权限的情况下运行rake
命令?
换句话说,有没有办法让db:create
和db:migrate
在没有root访问权限的情况下运行(可能是自动或某种东西)?或者我可以从RoR rake
运行controller
命令吗?
答案 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访问权限,那么它可以为您运行这些任务。