2014-08-27 3 views
0

Я работаю прямо сейчас в приложении Rails 4.0 (с использованием Ruby 2.0.0).Инициализация информации о переменных Gem-Specific в Ruby On Rails

Я хотел бы взаимодействовать с Дженкинсом, используя jenkins_api_client gem, с нескольких страниц моего приложения Rails.

Этот жемчуг обычно использует параметр @client, который инициализирован для хранения учетных данных и другой информации сервера Jenkins. Этот параметр инициализируется используя что-то вроде этого:

@client = JenkinsApi::Client.new(:server_ip => '0.0.0.0', 
    :username => 'somename', :password => 'secret password') 

После инициализации, я хотел бы, чтобы этот параметр и запускать несколько подпрограмм на нем. Этой инициализация занимает много времени, и я очень хочу, чтобы не делать этот процесс каждый раз, когда один из клиентов хотели бы использовать эту функциональность гема, такие как:

# Get a filtered list of jobs from the server 
jobs_to_filter = "^test_job.*" 
jobs = @client.job.list(jobs_to_filter) 

Итак, я надеюсь сделать это только оновлено когда запускается сервер rails.

Я хотел бы использовать этот параметр на нескольких страницах своего приложения, возможно, с помощью потокового решения дальше по дороге (в настоящий момент это не критически).

Может ли кто-нибудь порекомендовать, как этого достичь? Я был бы признателен за ответ, который согласуется с конвенцией Rails.

Большое спасибо!

+0

это выглядит, как вы могли бы инициализировать ваш клиент singleton jenkins из config/initilizers. – IS04

+0

Привет, спасибо за ответ. Можете ли вы предложить, как это достигается? Является ли это соглашением о рельсах настройки этих параметров? (Например, я знаю, что когда импортируются другие рельсы, создаются конкретные файлы, и я не видел ни одного из этих файлов в config/initializers) – cyber101

+0

Я написал пример кода как ответ – IS04

ответ

1

В качестве примера можно создать что-то вроде этого:

module JenkinsApi 
    class Client 
    class << self 
     attr_reader :instance, :config 

     def configure(&block) 
     @config = OpenStruct.new 
     block.call @config 
     end 

     def instance 
     @instance ||= JenkinsApi::Client.new @config 
     end 
    end 
    end 
end 

которые позволяют писать в инициализаторе:

JenkinsApi::Client.configure do |config| 
    config.server_ip = '0.0.0.0' 
    config.username = 'somename' 
    config.password = 'secret password' 
end 

, а затем использовать его как: JenkinsApi::Client.instance.job.list(...

+0

Спасибо! Можете ли вы указать, где идет каждая часть кода? (в частности, первая часть). Кроме того, следует ли использовать в любом месте приложения «запрос» или «требование» для оригинального драгоценного камня? И, наконец, будут ли какие-либо ограничения в виде потокового приложения? – cyber101

+0

Первая часть, которую вы можете поместить в 'lib/..', также вы можете потребовать ее в части инициализации. Что касается потоков, я не знаю, почему это может дать некоторые ограничения – IS04

+0

Получил это. Благодаря! Я буду реализовывать это и комментировать в случае каких-либо ошибок. – cyber101

Смежные вопросы