2009-02-09 3 views
7

Twitter에서 일부 데이터를로드하는 데 사용하는 Ruby 스크립트가 내 Rails 앱에 있습니다. 향후 다소 독립적 인 Ruby 스크립트를 위해 Rails 환경을 설정하려면 어떻게해야합니까?

나는 그것을 자동으로 백그라운드 프로세스를 만들 것입니다,하지만 지금은 내가 좋아하는 수동으로 실행 : 레일 모델 클래스와 같은, 나는 정상으로 다음의 한을 사용하기 위해서는

ruby /lib/twitter/twitterLoad.rb 

스크립트 줄 :

require "#{File.dirname(__FILE__)}/../../config/environment.rb" 

기본적으로 개발 환경이 사용됩니다. 그러나 어느 시점에서 프로덕션 환경을 선택할 수 있기를 바랍니다.

업데이트 # 1 : environment.rb 파일에 RAILS_ENV 상수가 설정됩니다. 그래서 ENV [ 'RAILS_ENV'] = 'production'을 맨 위 (environment.rb 앞에) 줄 수 있었고 문제를 다소 해결할 수있었습니다. 그래서, 나의 새로운 질문은 명령 행을 통해 env에 전달할 수 있다는 것입니다. RAILS_ENV = '<your environment of choice>'

http://wiki.rubyonrails.org/rails/pages/Environments#script

pantulis :

답변

22

당신은 레일 환경을 사용하는 거라면, 당신의 최선의 방법이 갈퀴 스크립트하게하는 것입니다. 이렇게하려면 lib 디렉토리/작업twitter.rake 파일을 넣고 시작하고 이런 식으로 종료 : "다음과 같은 규칙"에 의해

task(:twitter_load => :environment) do 
    # your code goes here 
end 

그 방법은, 당신이 그것을하고있는 그것은 '아무튼 그와 관련된 '끔찍한 냄새'가 있습니다.

0

는 줄을 추가 그것은 그 작동 멋진하지만 quickies을 위해 난 그냥 = '<your environment of choice>' ruby path/to/script.rb RAILS_ENV를 사용합니다. 이것은 콘솔에서 환경 변수를 설정하는 방법입니다.

+0

이미 'environment.rb'파일에 설정되어 있으므로 다음과 같은 오류가 발생합니다. lib/twitter/twitterLoad.rb : 11 : warning : 이미 초기화 된 상수 RAILS_ENV – messick

+0

이후에 require를 추가해야합니다. –

1

당신도 할 수

스크립트/콘솔 개발 < 경로 /로/당신의/script.rb Admiteddly 성가신 - 그리고는 각각의 스크립트의 모든 라인을 평가 한 후 IRB 쓰레기를 많이 뱉어

- 그러나 quickies를 위해 일하고 그 dontned 회선을 기억해야하지 않는다.

유용한 기능을하는 스크립트로 앱을 확장하는 가장 우아한 방법은 레이크 작업을 작성하는 것입니다.

+0

글쎄, 이것은 BackgrounDRB가 자동으로 스크립트를 실행하기 전까지는 일시적인 문제 일뿐입니다. 그래서, kludgey 동안, 이것은 지금 일할 것입니다. – messick

9

현재 다음 방법을 사용하고 있으며 환경에 rb 확장자가 없으므로 필요하지 않습니다. 실행 후 실행하여 ENV["RAILS_ENV"]을 덮어 쓸 수도 있습니다.

 
#!/usr/bin/env ruby 

# Set your environment here. 
ENV["RAILS_ENV"] ||= "production" 

require File.dirname(__FILE__) + "/../../config/environment" 

puts "Rails was loaded!" 

은 그럼 그냥 그것을 실행 환경을 변경하려면 다음

rb /lib/tasks/file.rb RAILS_ENV=development
+0

그래, 아람의 대답으로 인해 재정의 상수 오류가 발생했다. 이것이 내가 시도한 것이고 효과가있다. 그러나 Pantulis의 대답은 내가 명령 행에서 어떤 환경을 선택하는지 알려줍니다. – messick

+0

스크립트를 실행하는 동안 상수를 설정할 수도 있습니다 (처음에는 대답을 예로 추가했습니다) – Garrett

5

script/runner을 잊지 마세요.

명령 줄에서 환경 변수 설정

ruby script/runner your_script_here.rb 
+0

장점은 무엇입니까? 단점? Rails 3.0과 관련이 있습니까? –

+3

3.0 이상에서는'rails runner path/to/script'를 사용하십시오. 참고 : 스크립트의 경로는 작업 루트가 아닌 프로젝트 루트에 상대적입니다. –

1

rake를 사용하도록 허용 대답은 잘 찍은 것입니다,하지만 당신은 여전히 ​​수동으로 유틸리티 클래스를 테스트하기위한 환경을 설정할 수 있습니다.

다음은 유틸리티 클래스의 테스트 환경을 /lib에 설정하는 방법입니다. 이를 위해 필자는 클래스 파일을 명령 줄에서 실행할 때 테스트를 실행하는 Ruby 규칙을 사용하는 경향이 있습니다. 이 방법으로 Tails를 Rails의 웹 중심 테스트 도구 바깥에서 할 수 있지만 여전히 설정하는 환경에는 영향을주지 않고 rake 안에 클래스를 사용하십시오.

이 상단에 간다 :

if (__FILE__ == $0) 
    ENV['RAILS_ENV'] ||= 'test' 
    require File.join(File.dirname(__FILE__),'../config/environment.rb') 
end 

이 하단에 배치됩니다 :

if (__FILE__ == $0) 
    require 'test/unit/ui/console/testrunner' 
    Test::Unit::UI::Console::TestRunner.run(MyClassTest) 
end 
0
require 'bundler' 
require 'bundler/setup' 

ENV['RAILS_ENV'] ||= 'development' 

RAILS_ROOT = Pathname.new(File.expand_path('~/path/to/root')) 

puts "Loading Rails Environment from #{RAILS_ROOT}..." 
require RAILS_ROOT.join('config/environment').to_s 

이것은 작동하지만 스크립트의 Gemfile이 모든 종속성을 포함하는 경우에만 레일 애플 리케이션. 이 복사/붙여 넣기를 극복하기 위해 하나의 Gemfile을 다른 파일 (예 : eval)에서로드 할 수 있습니다.

관련 문제