当我尝试在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`
有更好的方法吗?
答案 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