Как я могу установить среду Rails для своего несколько автономного сценария Ruby? - PullRequest
8 голосов
/ 09 февраля 2009

В моем приложении на Rails есть скрипт Ruby, который я использую для загрузки некоторых данных из Twitter.

В будущем я сделаю автоматический фоновый процесс, но сейчас я запускаю его вручную, как:

ruby /lib/twitter/twitterLoad.rb

Чтобы использовать классы моделей Rails и т.п., в качестве верхней строки скрипта у меня есть следующее:

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

По умолчанию используется среда разработки. Но я бы хотел в какой-то момент выбрать производственную среду.

Обновление # 1 : Константа RAILS_ENV устанавливается в файле environment.rb. Таким образом, я смог поместить ENV ['RAILS_ENV'] = 'production' в самую верхнюю строку (перед environment.rb) и несколько решить мою проблему. Итак, мой новый вопрос: можно ли передать в env vars через командную строку?

Ответы [ 7 ]

23 голосов
/ 09 февраля 2009

Если вы собираетесь использовать среду рельсов, лучшим вариантом будет сделать этот скрипт рейком. Для этого поместите файл twitter.rake в lib / tasks и начните и завершите его следующим образом:

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

Таким образом, вы делаете это «по следующим соглашениям», и с этим не связан этот «ужасный запах».

10 голосов
/ 09 февраля 2009

В настоящее время я использую следующий метод и знаю, что в среде нет расширения 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
5 голосов
/ 10 февраля 2009

Не забудьте скрипт / бегун .

Установите переменную окружения из командной строки и

ruby script/runner your_script_here.rb
2 голосов
/ 08 апреля 2010

Принятый ответ для использования rake хорошо принят, но вы все равно можете вручную настроить среду для тестирования служебных классов.

Вот что я использую для настройки тестовой среды для служебных классов в /lib. Для этого я склонен использовать соглашение Ruby, заставляющее мой файл класса выполнять свои тесты, когда он запускается из командной строки. Таким образом, я могу использовать TDD за пределами веб-ориентированных тестов 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
1 голос
/ 09 февраля 2009

Вы также можете сделать

сценарий / разработка консоли <путь / к / вашему / script.rb </p>

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

И не забывайте, что, возможно, самый элегантный способ дополнить ваше приложение скриптами, которые делают полезные вещи, - это написание Rake-задач!

0 голосов
/ 21 августа 2013
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 вашего скрипта содержит все зависимости вашего rails-приложения. Вы можете загрузить один Gemfile из другого, например, просто eval, чтобы преодолеть эту копию / вставку.

0 голосов
/ 09 февраля 2009

добавить строку: RAILS_ENV = '<your environment of choice>'

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

pantulis: Круто, что это работает, но для быстрого я просто использую RAILS_ENV = '<your environment of choice>' ruby path/to/script.rb Вот как вы устанавливаете переменные окружения в консоли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...