Подтвердить что ты не робот

Пропустить ruby ​​script файл на консоль rails

Есть ли способ передать файл ruby, foo.rb в rails console. Ожидаемые результаты состоят в том, что консоль запускает среду рельсов для запуска файла.

Или любым другим способом, который позволил бы мне выполнить файл в среде rails, вызванный из командной строки.

4b9b3361

Ответ 1

Тем временем это решение было поддержано.

rails r PATH_TO_RUBY_FILE

Намного проще.

Ответ 2

Собственно, самый простой способ - запустить его с помощью load внутри rails console

 load './path/to/foo.rb'

Ответ 3

Вы можете использовать

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

UPDATE:

То, что мы также использовали в последнее время, - это загрузить среду рельсов из самого script. Рассмотрим doit.rb:

#!/usr/bin/env ruby

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

# ... do your stuff

Ответ 4

script/console --irb=pry < test.rb > test.log

простой, грязный и блокировать процесс в конце, но он выполняет работу точно так, как я хотел.

Ответ 5

Из этих подходов, о которых упоминалось ранее, ни один из них не выглядел чистым и идеальным, как вы ожидали бы автономного script для запуска (не получить оценку или передать через < redirection), но, в конце концов, это отлично подходит для меня:

(для Rails 3)

Вставьте вверху вашего script:

#!/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...

Конечно, настройте свой собственный путь к Rails в строке APP_PATH.

Таким образом, я могу избежать ввода каких-либо интерактивных irb или rails c и может проверить мой script.rb из командной строки, прежде чем, например. планируя его в crontab.

Он плавно поддерживает параметры командной строки и минимизирует уровни оберток перед тем, как перейти к вашему коду.

CREDIT (также показывает пример Rails 2)

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

Ответ 6

Здесь я использую hack:

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}')";}

Пример:

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

На основании ответа @moritz здесь. Я изменил его, так как рабочий каталог для File.read - это корень проекта Rails.

Я знаю, что это серьезная ересь, использующая python, чтобы помочь рубину script. Но я не смог найти метод relpath, встроенный в ruby.

Кредит: relpath() был взят из @MestreLion, Преобразовать абсолютный путь в относительный путь с учетом текущего каталога с помощью Bash

Ответ 7

Рассмотрите возможность создания рейк-задачи.

Для кода, который мне нужен для создания записей или поддержки миграции, например, я часто создаю подобную задачу из этого ответа. Например:

В 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

И затем в терминальном запуске:

rake example:create_user