首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在docker中运行ruby 1.8.7

在docker中运行ruby 1.8.7
EN

Stack Overflow用户
提问于 2018-11-28 01:40:31
回答 1查看 886关注 0票数 0

我继承了一个非常旧的应用程序,它是使用ruby 1.8.7和postgres构建的,我正在尝试为它创建一个docker图像。

从这个图像https://hub.docker.com/r/hublogix/minimal-ruby/中,我将应用程序代码添加到图像中。

所以现在我在图像里面,我可以看到:

代码语言:javascript
复制
bash-4.3# ls
Capfile    REVISION   Rakefile   app        config     config.ru  db         doc        lib        public     script     test       tmp        vendor
bash-4.3#


bash-4.3# gem install rake
Fetching: rake-12.3.1.gem (100%)
ERROR:  Error installing rake:
        rake requires Ruby version >= 2.0.0.
bash-4.3#

config/environment.rb ment.rb如下所示:

代码语言:javascript
复制
# Be sure to restart your server when you modify this file

# Specifies gem version of Rails to use when vendor/rails is not present
RAILS_GEM_VERSION = '2.3.16' unless defined? RAILS_GEM_VERSION

APP_NAME = "App name"

# Bootstrap the Rails environment, frameworks, and default configuration
require File.join(File.dirname(__FILE__), 'boot')

Rails::Initializer.run do |config|

  config.gem "inherited_resources",
    :source => "http://gemcutter.org",
    :version => "1.0.1"

  config.gem "has_scope",
    :lib    => "has_scope",
    :source => 'http://gemcutter.org',
    :version => "0.4.1"

  config.gem "haml"

  config.gem "will_paginate", 
    :lib    => "will_paginate",
    :source => "http://gemcutter.org"

  config.gem "searchlogic",
    :lib     => "searchlogic",
    :source  => "http://gemcutter.org",
    :version => "2.4.11"

  config.gem "paperclip",
    :lib     => "paperclip",
    :source  => "http://gemcutter.org",
    :version => "2.3.1.1"

  config.gem "clearance",
    :lib     => "clearance",
    :source  => "http://gemcutter.org",
    :version => "0.8.8"

  config.gem "rsl-stringex",
    :lib     => "stringex",
    :source  => "http://gems.github.com",
    :version => "1.0.3"

  config.gem 'formtastic',
    :lib     => "formtastic",
    :version => "0.9.7"

  config.gem "acts_as_audited",
    :lib     => "acts_as_audited",
    :version => "1.1.0"

  config.gem "prawn",
    :version => "0.8.4"

  config.gem "htmlentities",
    :version => "4.2.0"

  config.gem "emap_single_sign_on"

  config.gem "rmagick",
    :lib => "RMagick"

  config.load_paths += %W( #{Rails.root}/app/mailers #{Rails.root}/app/observers #{Rails.root}/app/sweepers )
  config.load_paths += %W( #{Rails.root}/app/presenters #{Rails.root}/app/reports)

  config.frameworks -= [ :active_resource ]

  # config.active_record.observers = :name

  config.time_zone = 'UTC'

end

GOOGLE_ANALYTICS_TRACKING_CODE = ""

当我试图运行它时,我从容器中得到了这个错误:

代码语言:javascript
复制
/usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:900:in `report_activate_error': Could not find RubyGem rack (~> 1.1.0) (Gem::LoadError)
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:248:in `activate'
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:1276:in `gem'
        from /usr/src/vendor/rails/actionpack/lib/action_controller.rb:34
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
        from /usr/src/vendor/rails/activesupport/lib/active_support/dependencies.rb:182:in `require'
        from /usr/src/vendor/rails/activesupport/lib/active_support/dependencies.rb:547:in `new_constants_in'
        from /usr/src/vendor/rails/activesupport/lib/active_support/dependencies.rb:182:in `require'
        from /usr/src/vendor/rails/railties/lib/commands/server.rb:2
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
        from ./script/server:3

depandanices列表:

代码语言:javascript
复制
actionmailer (2.3.17)
actionpack (2.3.17)
activerecord (2.3.17)
activeresource (2.3.17)
activesupport (2.3.17)
andre-geokit (1.2.5)
backup (3.0.25)
builder (3.2.2)
bundler (1.5.3)
excon (0.31.0)
fastercsv (1.5.5, 1.5.4)
formatador (0.2.4)
geocoder (1.1.9)
haml (4.0.5, 2.0.9)
json (1.8.1)
mislav-will_paginate (2.3.11)
multi_json (1.9.0)
mysql (2.9.1, 2.8.1)
newrelic_rpm (3.7.3.204)
nokogiri (1.4.2, 1.4.1)
open4 (1.3.3)
puma (2.8.1)
rack (1.1.6, 1.1.0)
rails (2.3.17)
rake (10.1.1)
rdoc (4.1.1)
RedCloth (4.2.9)
right_aws (3.1.0)
right_http_connection (1.4.0)
rmagick (2.13.3, 2.13.2)
rubyist-aasm (2.0.5)
stringex (1.2.0)
thor (0.15.4)
thoughtbot-paperclip (2.2.9.2)
tilt (2.0.0)

我有供应商文件夹,其中有所有的依赖项,但我不清楚我还需要做什么,以便在docker中安装基本系统?

对如何在docker中运行或构建此应用程序有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2018-11-28 15:53:11

当您使用gem install rake手动安装rake gem时,gem会尝试安装最新版本。但是最新版本的rake不再支持旧版本的Ruby.相反,您需要选择一个仍然可以与Ruby 1.8.7一起使用的版本

但这只是你问题的一部分。您的问题是,您需要安装应用程序的所有依赖项,而不需要任何关于应用程序可能具有的依赖项的信息。

由于Ruby on Rails 3.0使用bundler来管理依赖关系。我强烈建议你开始用adding bundler and a Gemfile to your application解决你的问题。

请记住,关于应用程序可能具有的依赖项,您只能获得非常有限的信息。你知道这是基于Ruby 1.8.7构建的,Ruby 1.8.7是在2008年中期发布的。因此,我猜测您的应用程序是在2008- 2010年构建的(2010年之后,开发人员可能会使用Ruby 1.9.x)。

当时rake的最新版本是~> 0.8.3 (参见rake versions)。此外,我猜您的应用程序使用的是Ruby on Rails 2.x (请参阅rails versions)。在<3.0 Rails应用程序中,通常可以找到分配给RAILS_GEM_VERSIONconfig/environment.rb中的Rails版本。我假设它是2.3.5。在应用程序根目录中使用以下信息创建一个Gemfile

代码语言:javascript
复制
source 'https://rubygems.org'

gem 'rails', '2.3.5'
gem 'rake', '~> 0.8.7'

通过运行bundle install安装这些gem,并尝试打开rails控制台或启动应用程序服务器。这很可能不起作用,您需要将更多的gem作为依赖项添加到Gemfile中。

我猜您需要添加以下内容:

代码语言:javascript
复制
gem 'rack', '~> 0.9.0'
gem 'mysql', '2.8.1'

仔细观察错误消息,例如,如果Ruby抱怨缺少名为foo的gem,那么在Rubygems上查看2008-2010年左右可用的foo gem的哪个版本,并将gem 'foo', '<version number>'添加到您的Gemfile中,然后再次运行bundle install

以这种方式查找所有必需的依赖项并不容易,要找到特定版本的工作集就更难了。但在没有进一步信息的情况下,这是最好的开始方式。祝好运!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53505250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档