2010-12-28 6 views
0

railsプロジェクト内でシェルコマンドを実行しようとすると、環境のような継ぎ目が読み込まれません。Railsシェルコマンド - レーキが見つかりません

私はこのようにそれを修正:

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` 

は、より良い方法はありますか?

答えて

2

なぜRailsプロジェクト内からRakeをシェルして呼び出そうとしていますか?すべての仕事をするクラスを作ってください。

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

あなたは非常に簡単レーキからこれを使用することができます。

# 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 
関連する問題