[RUBY-ON-RAILS] 어떻게 레일에 환경과 레이크 작업에 인수를 전달하는 방법? [복제]
RUBY-ON-RAILS어떻게 레일에 환경과 레이크 작업에 인수를 전달하는 방법? [복제]
나는 다음과 같이 인수에 통과 할 수 있어요 :
desc "Testing args"
task: :hello, :user, :message do |t, args|
args.with_defaults(:message => "Thanks for logging on")
puts "Hello #{args[:user]}. #{:message}"
end
또한 레일 응용 프로그램의 현재 환경을로드 할 수 있어요
desc "Testing environment"
task: :hello => :environment do
puts "Hello #{User.first.name}."
end
내가 뭘하고 싶은 변수와 환경을 가질 수있다
desc "Testing environment and variables"
task: :hello => :environment, :message do |t, args|
args.with_defaults(:message => "Thanks for logging on")
puts "Hello #{User.first.name}. #{:message}"
end
그러나 그것은 유효한 작업을 호출하지 않습니다. 누구 알고 나는 이것을 달성 할 수 있는가하는 방법?
해결법
-
==============================
1.
task :t, [args] => [deps]
당신이 레이크 작업에 인수를 전달하는 경우, 당신은을 사용하여 환경을 필요로 할 수 있습니다 옵션이 필요합니다. 예를 들면 :
desc "Testing environment and variables" task :hello, :message, :needs => :environment do |t, args| args.with_defaults(:message => "Thanks for logging on") puts "Hello #{User.first.name}. #{args.message}" end
아래 Peiniau의 코멘트 @마다 업데이트
레일에 관해서> 3.1
task :t, arg, :needs => [deps] # deprecated
이용 해주세요
task :t, [args] => [deps]
-
==============================
2.그냥이 오래된 주제에 대한 후속 조치; 여기에 내가 (오래 전부터) 현재 Rakefile 생각이해야 할 일입니다. 그것은 현재의 경력 답 (hgimenez)의 업그레이드 및 버그가 잡힌 버전입니다 :
그냥이 오래된 주제에 대한 후속 조치; 여기에 내가 (오래 전부터) 현재 Rakefile 생각이해야 할 일입니다. 그것은 현재의 경력 답 (hgimenez)의 업그레이드 및 버그가 잡힌 버전입니다 :
desc "Testing environment and variables" task :hello, [:message] => :environment do |t, args| args.with_defaults(:message => "Thanks for logging on") puts "Hello #{User.first.name}. #{args.message}" # Q&A above had a typo here : #{:message} end
이것은 당신이 그것을 (http://guides.rubyonrails.org/v4.2/command_line.html#rake)를 호출하는 방법입니다 :
rake "hello[World]"
(... [C : B :을, 안녕 작업), 그 쉼표로 구분 통과 다중 인수 단지 태스크 선언의 배열에 그 키워드를 추가
rake "hello[Earth,Mars,Sun,Pluto]"
참고 : 이상한 행성이 탈락되도록 인수의 수는 확인하지 않습니다 :)
-
==============================
3.그냥 완성도, 여기에 문서의 예는 위에서 언급 한 :
그냥 완성도, 여기에 문서의 예는 위에서 언급 한 :
task :name, [:first_name, :last_name] => [:pre_name] do |t, args| args.with_defaults(:first_name => "John", :last_name => "Dough") puts "First name is #{args.first_name}" puts "Last name is #{args.last_name}" end
노트:
-
==============================
4.또 다른 방법은 이것에 대해 이동 : 사용 OS 환경 변수를. 이 방법의 장점 :
또 다른 방법은 이것에 대해 이동 : 사용 OS 환경 변수를. 이 방법의 장점 :
나는 세 가지 명령 줄 옵션을 필요로하는 레이크 작업을해야합니다. 여기에 내가 그것을 호출하는 방법은 다음과 같습니다
$ rake eaternet:import country=us region=or agency=multco
즉 내가 좋아하는 매우 깨끗하고, 간단한, 그냥 bash는 구문입니다. 여기 내 레이크 작업입니다. 또한 매우 깨끗하고 마법 :
task import: [:environment] do agency = agency_to_import puts "Importing data for #{agency}..." agency.import_businesses end def agency_to_import country_code = ENV['country'] or raise "No country specified" region_slug = ENV['region'] or raise "No region specified" agency_slug = ENV['agency'] or raise "No agency specified" Agency.from_slugs(country_code, region_slug, agency_slug) end
이 특별한 예는 종속의 사용을 표시하지 않습니다. 하지만 : 가져 오기 작업이 다른 사람에 의존 않았다, 그들은 또한이 옵션에 액세스 할 수있는 것입니다. 일반 레이크 옵션 방법을 사용하여, 그들은하지 않을 것입니다.
-
==============================
5.이 솔루션은 작업하는 동안, 내 의견이 지나치게 복잡하다.
이 솔루션은 작업하는 동안, 내 의견이 지나치게 복잡하다.
당신이 zsh을에서 이런 식으로 할 경우 배열의 브라켓과 함께 탈출하지 않는 경우 또한, 당신은 오류를 얻을 것이다 '\'.
나는 잘 작동 훨씬 간단하고, 오류가 적은 경향이있는 ARGV 배열을 사용하는 것이 좋습니다. 예컨대 :
namespace :my_example do desc "Something" task :my_task => :environment do puts ARGV.inspect end end
그때
rake my_example:my_task 1 2 3 #=> ["my_example:my_task", "1", "2", "3"]
당신이 명심해야 할 유일한 것은 그렇게 만 ARGV [1 ..- 1]를 사용, ARGV [0] 프로세스 이름이라는 것이다.
솔루션의 일환으로 환경 : 나는 그것을 사용하지 않는 엄격하게이 말하는 것은, 질문에 대답하지 않는 것을 알고 있습니다. 그러나 영업 이익은 여전히 자신의 사용 사례에 적용 할 수 있도록 그가 그 규정을 포함하는 이유 상태하지 않았다.
from https://stackoverflow.com/questions/1357639/how-to-pass-arguments-into-a-rake-task-with-environment-in-rails by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 어떻게 루비 클래스의 이름을받을 수 있나요? (0) | 2020.02.27 |
---|---|
[RUBY-ON-RAILS] 루비 온 레일즈 Gemfile 및 Gemfile.lock의 차이점은 무엇입니까 (0) | 2020.02.27 |
[RUBY-ON-RAILS] PG 보석을 설치할 수 없습니다 (0) | 2020.02.27 |
[RUBY-ON-RAILS] 임베디드 HTML과 LINK_TO 사용 (0) | 2020.02.27 |
[RUBY-ON-RAILS] 레일의 범위 / named_scope은 무엇인가? (0) | 2020.02.27 |