【问题标题】:Running Rake Without Shell Access?在没有 Shell 访问的情况下运行 Rake?
【发布时间】:2009-01-25 23:57:19
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails shell rake


    【解决方案1】:

    查看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'))
    

    【讨论】:

    • 有趣。我很快就会和我的第一个 Rails 应用程序/部署一起解决这个问题。谢谢!
    【解决方案2】:

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

    【讨论】:

    • 我会检查的。我认为 RoR 实例可能会在没有创建数据库的情况下启动,事实上......只要我不调用需要它的控制器......
    • 不,没问题,您可以在不运行 db create 的情况下启动 RoRT...
    【解决方案3】:

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

    【讨论】:

    • 谢谢斯科特。创建数据库或使用 MySql 转储脚本等迁移都没有问题。但我宁愿不打扰......
    【解决方案4】:

    试试这个代码:

    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`
    

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-25
        • 2014-05-18
        • 2012-11-08
        • 1970-01-01
        • 2012-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多