Jak uruchomić plik Ruby w środowisku Rails?

106

Chcę uruchomić plik Ruby w kontekście środowiska Railsów. rails runner prawie robi to, co chcę, ale chciałbym tylko podać nazwę pliku i argumenty. Jestem prawie pewien, że jest to możliwe, ponieważ robiłem to wcześniej. Czy ktoś może mi przypomnieć, jak to zrobić?

weicool
źródło

Odpowiedzi:

36

Po prostu wymagaj environment.rbw swoim skrypcie. Jeśli twój skrypt znajduje się w scriptkatalogu aplikacji Railsów, zrób to

require File.expand_path('../../config/environment', __FILE__)

Możesz kontrolować używane środowisko (programowanie / testowanie / produkcja), ustawiając RAILS_ENVzmienną środowiskową podczas uruchamiania skryptu.

RAILS_ENV=production ruby script/test.rb
iltempo
źródło
Jeśli uruchomię powyższy kod, to da "home / apps / config / environment". Co się stanie, jeśli mam 2 aplikacje rails uruchomione w tym samym katalogu. Jakie środowisko zajmie? mam ten problem w mojej lokalnej skrzynce. uprzejmie zasugeruj
Vijay Sali
@VijaySali Zakładam, że uruchamiasz swój skrypt z app/scriptkatalogu. Plik środowiska zostanie pobrany z indywidualnej aplikacji.
iltempo
tak, dziękuję, że zadziałało, dodałem również ENV ['RAILS_ENV']
Vijay Sali
26

Runner uruchamia kod Ruby w kontekście Railsów w sposób nieinteraktywny.

Z rails runnerpolecenia:

Usage: runner [options] ('Some.ruby(code)' or a filename)

    -e, --environment=name           Specifies the environment for the runner to operate under (test/development/production).
                                     Default: development

    -h, --help                       Show this help message.

Możesz również użyć runnera jako linii shebang dla swoich skryptów, w następujący sposób:

-------------------------------------------------------------
#!/usr/bin/env /Users/me/rails_project/script/rails runner

Product.all.each { |p| p.price *= 2 ; p.save! }
-------------------------------------------------------------
colsen
źródło
1
Dlaczego to działa tylko wtedy, gdy określę „/ Users / me / rails_project / script / rails” w całości, a nie tylko „rails”? TIA
iphone007
Czy Twoje inne polecenia rails również wymagają podania pełnej ścieżki? (tj. serwer
railsowy
@ iphone007 może zależeć od tego, skąd uruchamiasz skrypt.
David Moles
7

To stare pytanie, ale moim zdaniem często pomocne jest utworzenie zadania prowizji ... i jest to w rzeczywistości bardzo łatwe.

W lib/tasks/example.rake:

namespace :example do

desc "Sample description you'd see if you ran: 'rake --tasks' in the terminal"
task create_user: :environment do
  User.create! first_name: "Foo", last_name: "Bar"
end

A potem w terminalu uruchom:

rake example:create_user

Lokalnie będzie to uruchamiane w kontekście Twojej deweloperskiej bazy danych, a jeśli zostanie uruchomione w Heroku, zostanie uruchomione podczas połączenia z produkcyjną bazą danych. Uważam, że jest to szczególnie przydatne przy migracji lub modyfikowaniu tabel.

Matt
źródło