带有"gemfile "Gemfile" , "group" "的 .worker 文件增加了远程构建时间 x10



为了更好地管理应用程序中所需的 gem,我创建了一个名为 :iron 的 Gemfile 组:

group :default, :iron do
  gem "activerecord", require: 'active_record
  gem 'mysql2'
  gem 'aws-sdk'
  gem 'yajl-ruby'
  gem 'hashie'
  gem 'require_all'
end

这将有助于巩固铁工所需的宝石。我的 .worker 文件现在如下所示:

gemfile '../Gemfile', 'iron'

而不是冗余地单独列出所有宝石:

gem "activerecord"
gem 'mysql2'
...

不幸的是,这让我的远程构建时间从 1 分钟增加到了 10 分钟。输出试图包含更多的 gem,似乎冒泡了嵌套依赖项:

以前:

------> Creating code package
    Found workerfile with path='iron_job.worker'
    Detected exec with path='iron_job_bootstrapper.rb' and args='{}'
    Merging dir with path='../app/models' and dest=''
    Merging dir with path='../lib' and dest=''
    Merging file with path='iron.json' and dest=''
    Adding ruby gem dependency with name='activerecord' and version='>= 0'
    Adding ruby gem dependency with name='mysql2' and version='>= 0'
    Adding ruby gem dependency with name='aws-sdk' and version='>= 0'
    Adding ruby gem dependency with name='yajl-ruby' and version='>= 0'
    Adding ruby gem dependency with name='hashie' and version='>= 0'
    Adding ruby gem dependency with name='require_all' and version='>= 0'

后:

------> Creating code package
        Found workerfile with path='iron_job.worker'
        Detected exec with path='iron_job_bootstrapper.rb' and args='{}'
        Merging dir with path='../app/models' and dest=''
        Merging dir with path='../lib' and dest=''
        Merging file with path='iron.json' and dest=''
        Adding ruby gems dependencies from iron group of ../Gemfile
        Adding ruby gem dependency with name='i18n' and version='0.6.5'
        Adding ruby gem dependency with name='minitest' and version='4.7.5'
        Adding ruby gem dependency with name='multi_json' and version='1.8.1'
        Adding ruby gem dependency with name='atomic' and version='1.1.14'
        Adding ruby gem dependency with name='thread_safe' and version='0.1.3'
        Adding ruby gem dependency with name='tzinfo' and version='0.3.37'
        Adding ruby gem dependency with name='activesupport' and version='4.0.0'
        Adding ruby gem dependency with name='builder' and version='3.1.4'
        Adding ruby gem dependency with name='activemodel' and version='4.0.0'
        Adding ruby gem dependency with name='activerecord-deprecated_finders' and version='1.0.3'
        Adding ruby gem dependency with name='arel' and version='4.0.0'
        Adding ruby gem dependency with name='activerecord' and version='4.0.0'
        Adding ruby gem dependency with name='json' and version='1.8.0'
        Adding ruby gem dependency with name='mini_portile' and version='0.5.1'
        Adding ruby gem dependency with name='nokogiri' and version='1.6.0'
        Adding ruby gem dependency with name='uuidtools' and version='2.1.4'
        Adding ruby gem dependency with name='aws-sdk' and version='1.11.1'
        Adding ruby gem dependency with name='bundler' and version='1.3.5'
        Adding ruby gem dependency with name='hashie' and version='2.0.5'
        Adding ruby gem dependency with name='mysql2' and version='0.3.13'
        Adding ruby gem dependency with name='require_all' and version='1.3.1'
        Adding ruby gem dependency with name='yajl-ruby' and version='1.1.0'

此输出是本地的,但在 IronWorker 服务上的时间更长,因为它多次重新安装 gem(卸载然后重新安装捆绑器)。下面的日志包含详细信息。

https://hud.iron.io/tq/projects/5254773dd05880000d000003/tasks/525ee1d9f8953468b927e83f/log

从那以后,我们回到了一个 .worker 文件,它只是列出了我们需要的 gem,而不是调用 gemfile "Gemfile"、"iron"。有关如何在不重新安装捆绑器的情况下使用 gemfile 并有 10m 上传时间的任何帮助将不胜感激!

谢谢。


编辑

添加完整的宝石文件。请注意,我们不希望拉入:d efault组的所有宝石。这对我们的工人来说是矫枉过正。我们只想要:铁。

捆绑器版本 1.3.5

source 'https://rubygems.org'
ruby '1.9.3'
gem 'typhoeus' # Only for ruby 1.9.3
gem 'rails', '4.0.0'
gem 'sass-rails', '~> 4.0.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'haml-rails'
gem 'thin-rails'
gem 'therubyracer'
gem 'less-rails'
gem 'twitter-bootstrap-rails'
gem 'settingslogic'
gem 'iron_worker_ng'
group :default, :iron do
  gem "activerecord", require: 'active_record'
  gem 'mysql2'
  gem 'aws-sdk'
  gem 'yajl-ruby'
  gem 'require_all'
end
group :doc do
  # bundle exec rake doc:rails generates the API under doc/api.
  gem 'sdoc', require: false
end
group :production, :qa do
  gem 'rails_12factor' #for heroku
end
group :development, :test do
  gem 'factory_girl_rails'
  gem 'ffaker'
  gem 'shoulda-matchers'
  gem 'pry'
  gem 'debugger', '>= 1.6.1'
  gem 'pry-debugger'
  gem 'pivotal_git_scripts'
  gem 'rspec-rails'
  gem 'capybara'
  gem 'fuubar'
end
group :test do
  gem 'database_cleaner'
end

分组宝石文件:

source 'https://rubygems.org'
ruby '1.9.3'
group :rails do
  gem 'typhoeus' # Only for ruby 1.9.3
  gem 'rails', '4.0.0'
  gem 'sass-rails', '~> 4.0.0'
  gem 'uglifier', '>= 1.3.0'
  gem 'coffee-rails', '~> 4.0.0'
  gem 'jquery-rails'
  gem 'turbolinks'
  gem 'haml-rails'
  gem 'thin-rails'
  gem 'therubyracer'
  gem 'less-rails'
  gem 'twitter-bootstrap-rails'
  gem 'settingslogic'
  gem 'rack-mini-profiler'
end
group :rails, :iron do
  gem "activerecord", require: 'active_record'
  gem 'mysql2'
  gem 'aws-sdk'
  gem 'yajl-ruby'
  gem 'require_all'
  gem 'hashie'
  gem 'iron_worker_ng'
end
group :doc do
  # bundle exec rake doc:rails generates the API under doc/api.
  gem 'sdoc', require: false
end
group :production, :qa do
  gem 'rails_12factor' #for heroku
end
group :development, :test do
  gem 'factory_girl_rails'
  gem 'ffaker'
  gem 'shoulda-matchers'
  gem 'pry'
  gem 'debugger', '>= 1.6.1'
  gem 'pry-debugger'
  gem 'pivotal_git_scripts'
  gem 'rspec-rails'
  gem 'capybara'
  gem 'fuubar'
end
group :test do
  gem 'database_cleaner'
end

IronWorker 已经宣布了"Docker Workflow",你不再需要 .worker 文件了。您只需要在 docker 镜像中本地安装所有依赖项,重现与在 IronWorker 服务器上运行相同的环境。在这里,您可以找到一个红宝石"HelloWorld"示例。

最新更新