Przekaż plik skryptu ruby do konsoli rails

Czy istnieje sposób na przekazanie pliku ruby, foo.RB do konsoli rails. Oczekiwane rezultaty będą po uruchomieniu przez konsolę środowiska rails pliku.

Lub w inny sposób, który pozwoliłby mi uruchomić plik w środowisku rails, wyzwalany z wiersza polecenia.

Author: Haris Krajina, 2012-04-25

7 answers

Właściwie najprostszym sposobem jest uruchomienie go z load wewnątrz rails console

 load './path/to/foo.rb'
 131
Author: Adrian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-02 23:52:24

Możesz użyć

bundle exec rails runner "eval(File.read 'your_script.rb')"

Aktualizacja:

To, czego ostatnio często używamy, to Ładowanie środowiska rails z samego skryptu. Rozważmy doit.rb:

#!/usr/bin/env ruby

require "/path/to/rails_app/config/environment"

# ... do your stuff
 74
Author: moritz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-16 11:32:30

W międzyczasie rozwiązanie to zostało poparte.

rails r PATH_TO_RUBY_FILE
Teraz o wiele prościej.
 25
Author: Haris Krajina,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-11 15:32:03
script/console --irb=pry < test.rb > test.log

Prosty, brudny i blokuje proces na końcu, ale robi to dokładnie tak, jak chciałem.

 4
Author: hari seldon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-03 15:51:27

Rozważ utworzenie zadania rake.

Dla kodu, którego potrzebuję do tworzenia rekordów lub obsługi migracji, na przykład, często tworzę takie zadanie rake z tej odpowiedzi . Na przykład:

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 następnie w terminalu uruchom:

rake example:create_user
 4
Author: Matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:32

Z tych podejść wymienionych wcześniej, żaden nie wydawał się czysty i idealny, tak jak można by oczekiwać samodzielnego skryptu do uruchomienia( Nie get eval-ed lub piped via (dla Rails 3)

Wstaw na górze skryptu:

#!/usr/bin/env ruby

APP_PATH = File.expand_path(appdir = '/srv/staging/strat/fundmgr/config/application',  __FILE__)
require File.expand_path(appdir + '/../boot',  __FILE__)
require APP_PATH
# set Rails.env here if desired
Rails.application.require_environment!

# your code here...

Oczywiście, Ustaw własną ścieżkę aplikacji Rails w linii APP_PATH.

W ten sposób mogę uniknąć konieczności wpisywania dowolnego interaktywnego irb lub rails ci mogę przetestować mój skrypt .rb z wiersza polecenia powłoki, przed np. / align = "left" /

Obsługuje również płynnie parametry wiersza poleceń i minimalizuje poziomy opakowań przed dotarciem do kodu.

Kredyt (pokazuje również przykład Rails 2)

Http://zerowidth.com/2011/03/18/standalone-script-runner-bin-scripts-in-rails.html

 1
Author: Marcos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-27 16:02:57

Oto hack, którego używam:

rr() {
    rails_root="$(bundle exec rails runner "puts Rails.root")"
    rp="$(relpath "$1" "$rails_root")"
    bundle exec rails runner "eval(File.read '$rp')"
}
relpath() {python -c "import os.path; print os.path.relpath('$1','${2:-$PWD}')";}

Przykład:

cd ~/rails_project/app/helpers
rr my_script.rb

Na podstawie odpowiedzi @ moritz tutaj. Zmieniłem go, ponieważ katalog roboczy File.read jest katalogiem głównym projektu Rails.

Wiem, że to jakaś poważna herezja, używanie Pythona do pomocy skryptowi ruby. Ale nie mogłem znaleźć relpath metody wbudowanej w ruby.

Kredyt: relpath() został pobrany z @MestreLion, Konwersja ścieżki bezwzględnej na ścieżkę względną podaną w bieżącym katalogu za pomocą Bash

 0
Author: Chaim Leib Halbert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:03:04