Команда оболочки Rails - грабли не найдены - PullRequest
0 голосов
/ 28 декабря 2010

Похоже, что среда не загружается, когда я пытаюсь выполнить команду оболочки внутри проекта 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`

Есть ли лучший способ?

1 Ответ

2 голосов
/ 28 декабря 2010

Почему вы пытаетесь раскошелиться и вызвать Rake из проекта Rails? Просто создайте класс, который сделает всю работу.

# 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...