Rails shell命令 - 找不到rake

时间:2010-12-28 12:00:13

标签: ruby-on-rails shell rake

当我尝试在rails项目中执行shell命令时,它没有加载环境。

我这样修理:

rcmd = 'rake'
rcmd = '/opt/ruby-enterprise-1.8.7-2010.02/bin/rake' if Rails.env.to_s == 'production'
rcmd = '/usr/local/bin/rake' if Rails.env.to_s == 'staging'
`cd #{Rails.root}; #{rcmd} RAILS_ENV=#{Rails.env} ts:in:delta`

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

为什么要尝试从Rails项目中弹出并调用Rake?只做一个完成所有工作的课程。

# lib/ts_in_delta.rb
class TsInDelta
  def run
    # code that does all the work here
  end
end

你可以很容易地使用Rake中的这个:

# lib/tasks/ts_in_delta.rake
namespace :ts do
  namespace :in do
    task :delta => [:environment] do
      TsInDelta.new.run
    end
  end
end


# shell
$ rake ts:in:delta

您也可以非常轻松地从Rails项目的其他任何位置使用它,例如从控制器。

# app/controllers/posts_controller.rb (snippet)
class PostsController < ApplicationController
  def ts_in_delta
    TsInDelta.new.run
    render :json => true
  end
end

# config/routes.rb (snippet)
MyApp::Application.routes.draw do
  resources :posts do
    collection do
      post 'ts_in_delta'
    end
  end
end