【问题标题】:Installing Ruby 2.0 and Rails 4.0.0beta on AWS EC2在 AWS EC2 上安装 Ruby 2.0 和 Rails 4.0.0beta
【发布时间】:2013-03-10 05:33:42
【问题描述】:

在默认的 Amazon EC2 Linux 安装 (Amazon Linux AMI 2012.09.1) 上安装 Ruby 2.0.0 和 Rails 4.0.0beta1 非常顺利。 但是 openssl 阻碍了(例如 http://railsapps.github.com/openssl-certificate-verify-failed.html)并且奇怪的是阻止 openssl 安装或导致 RubyGem 包管理器安装 rails。

如何解决这些问题?

【问题讨论】:

    标签: ruby-on-rails amazon-web-services amazon-ec2 ruby-on-rails-4 ruby-2.0


    【解决方案1】:

    这是一个带有 rbenv 的变体。

    SSH 进入您的全新实例:

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|
    
    https://aws.amazon.com/amazon-linux-ami/2012.09-release-notes/
    There are 16 security update(s) out of 57 total update(s) available
    Run "sudo yum update" to apply all updates.
    Amazon Linux version 2013.03 is available.
    [jimjh ~]$ ruby --version
    ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-linux]
    

    模拟根并应用服务器更新:

    $> sudo su -
    $> yum update
    

    安装几个包:

    $> yum install git pcre pcre-devel
    

    克隆rbenv:

    $> git clone git://github.com/sstephenson/rbenv.git /usr/local/rbenv
    

    创建以下文件:

    # /etc/profile.d/rbenv.sh
    export RBENV_ROOT=/usr/local/rbenv
    export PATH="${RBENV_ROOT}/bin:$PATH"
    eval "$(rbenv init -)"
    

    安装ruby-build:

    $> . /etc/profile
    $> git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build
    

    安装红宝石:

    $> rbenv install 2.0.0-p195  # wait ...
    $> rbenv global 2.0.0-p195
    $> rbenv rehash
    

    更新 ruby​​gems 并安装乘客:

    $> gem update --system
    $> gem install bundler     
    $> gem install passenger
    

    通过passenger安装nginx:

    $> passenger start
    

    在撰写本文时,乘客的最新版本是 4.0.0,它适用于 ruby​​ 2.0.0。

    弹性豆茎 如果您使用的是 Elastic Beanstalk,请停止乘客

    $> sudo service passenger stop
    

    通过将以下内容添加到 /opt/elasticbeanstalk/support/envvars.d/appenv 来初始化 rbenv

    . /etc/profile.d/rbenv.sh
    

    开始乘客

    $> sudo service passenger start
    

    【讨论】:

    • 您可能还需要安装 openssl-devel。 yum install openssl-devel
    • 通过 rbenv 更新 ruby​​ 后,当我使用弹性 beanstalk 部署应用程序时,没有任何反应。有人知道会发生什么吗?
    • 我必须添加这个命令 - “yum install gcc” - 上面的说明中没有 c 编译器(或者我错过了它?)
    【解决方案2】:

    登录您的全新实例:

    [19:59:22] paul:~ $ ssh -i ~/.ssh/server.pem ec2-user@your.ip
    
       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|
    
      https://aws.amazon.com/amazon-linux-ami/2012.09-release-notes/
    

    并模拟根:

    $ sudo su -
    

    您从这里以 root 身份登录。应用服务器更新:

    [root@ip-xx ~]# yum update
    ...
    Complete!
    [root@ip-xx ~]# yum groupinstall "Development Tools"
    ...
    Install      72 Package(s)
    ...
    Complete!
    

    现在,这就是它与标准解决方案的不同之处。安装 RVM 但没有 ruby​​ 的分发:

    [root@ip-xx ~]# \curl -L https://get.rvm.io | bash -s stable
    
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   184  100   184    0     0    135      0  0:00:01  0:00:01 --:--:--   183
    100 11861  100 11861    0     0   7180      0  0:00:01  0:00:01 --:--:-- 64113
    Downloading RVM from wayneeseguin branch stable
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   124  100   124    0     0    161      0 --:--:-- --:--:-- --:--:--   185
    100 1615k  100 1615k    0     0   258k      0  0:00:06  0:00:06 --:--:--  401k
    
    Installing RVM to /usr/local/rvm/
        Creating group 'rvm'
    
    # RVM:  Shell scripts enabling management of multiple ruby environments.
    # RTFM: https://rvm.io/
    # HELP: http://webchat.freenode.net/?channels=rvm (#rvm on irc.freenode.net)
    # Cheatsheet: http://cheat.errtheblog.com/s/rvm/
    # Screencast: http://screencasts.org/episodes/how-to-use-rvm
    
    # In case of any issues read output of 'rvm requirements' and/or 'rvm notes'
    
    Installation of RVM in /usr/local/rvm/ is almost complete:
    
      * First you need to add all users that will be using rvm to 'rvm' group,
        and logout - login again, anyone using rvm will be operating with `umask u=rwx,g=rwx,o=rx`.
    
      * To start using RVM you need to run `source /etc/profile.d/rvm.sh`
        in all your open shell windows, in rare cases you need to reopen all shell windows.
    
    # root,
    #
    #   Thank you for using RVM!
    #   I sincerely hope that RVM helps to make your life easier and
    #   more enjoyable!!!
    #
    # ~Wayne
    

    让我们检查一下没有安装 ruby​​ 版本:

    [root@ip-xx ~]# rvm list
    
    rvm rubies
    
    
    # No rvm rubies installed yet. Try 'rvm help install'.
    

    现在,openssl 已经安装在系统上,但与 setup 不兼容:

    [root@ip-xx ~]# openssl version
    OpenSSL 1.0.0k-fips 5 Feb 2013
    
    [root@ip-xx ~]# openssl version -d
    OPENSSLDIR: "/etc/pki/tls"
    

    尝试使用此版本安装 ruby​​2 将导致以下错误:

    [root@ip-xx ~]# rvm install 2.0.0 -- --with-openssl-dir=/etc/pki/tls
    Fetching yaml-0.1.4.tar.gz to /usr/local/rvm/archives
    ######################################################################## 100.0%
    Extracting yaml to /usr/local/rvm/src/yaml-0.1.4
    Prepare yaml in /usr/local/rvm/src/yaml-0.1.4.
    Configuring yaml in /usr/local/rvm/src/yaml-0.1.4.
    Compiling yaml in /usr/local/rvm/src/yaml-0.1.4.
    Installing yaml to /usr/local/rvm/usr
    Installing Ruby from source to: /usr/local/rvm/rubies/ruby-2.0.0-p0, this may take a while depending on your cpu(s)...
    ruby-2.0.0-p0 - #downloading ruby-2.0.0-p0, this may take a while depending on your connection...
    ######################################################################## 100.0%
    ruby-2.0.0-p0 - #extracting ruby-2.0.0-p0 to /usr/local/rvm/src/ruby-2.0.0-p0
    ruby-2.0.0-p0 - #extracted to /usr/local/rvm/src/ruby-2.0.0-p0
    ruby-2.0.0-p0 - #configuring
    ruby-2.0.0-p0 - #compiling
    ruby-2.0.0-p0 - #installing 
    Retrieving rubygems-2.0.3
    ######################################################################## 100.0%
    Extracting rubygems-2.0.3 ...
    Removing old Rubygems files...
    Installing rubygems-2.0.3 for ruby-2.0.0-p0 ...
    Error running 'env GEM_PATH=/usr/local/rvm/gems/ruby-2.0.0-p0:/usr/local/rvm/gems/ruby-2.0.0-p0@global:/usr/local/rvm/gems/ruby-2.0.0-p0:/usr/local/rvm/gems/ruby-2.0.0-p0@global GEM_HOME=/usr/local/rvm/gems/ruby-2.0.0-p0 /usr/local/rvm/rubies/ruby-2.0.0-p0/bin/ruby /usr/local/rvm/src/rubygems-2.0.3/setup.rb', please read /usr/local/rvm/log/ruby-2.0.0-p0/rubygems.install.log
    Installation of rubygems did not complete successfully.
    Saving wrappers to '/usr/local/rvm/bin'.
    ruby-2.0.0-p0 - #adjusting #shebangs for (gem irb erb ri rdoc testrb rake).
    cp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/gem'? y
    cp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/irb'? y
    cp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/erb'? y
    cp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/ri'? y
    cp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/rdoc'? y
    cp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/testrb'? y
    cp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/rake'? y
    ruby-2.0.0-p0 - #importing default gemsets, this may take time ...
    Install of ruby-2.0.0-p0 - #complete
    

    虽然您将获得 ruby​​2,但“rubygems 的安装未成功完成” - 请注意警告:“Error running 'env GEM_PATH=...”

    相反,我们将让 RVM 为我们安装一个 openssl 副本(请参阅 https://rvm.io/packages/openssl/)。需要 zlib-devel 包:

    [root@ip-xx ~]# yum install zlib-devel
    ...
    Installed:
      zlib-devel.x86_64 0:1.2.5-7.11.amzn1                                                                                  
    
    Complete!
    [root@ip-xx ~]# rvm pkg install openssl
    Fetching openssl-1.0.1c.tar.gz to /usr/local/rvm/archives
    Extracting openssl to /usr/local/rvm/src/openssl-1.0.1c
    Configuring openssl in /usr/local/rvm/src/openssl-1.0.1c.
    Compiling openssl in /usr/local/rvm/src/openssl-1.0.1c.
    Installing openssl to /usr/local/rvm/usr
    
    Please note that it's required to reinstall all rubies:
    
        rvm reinstall all --force
    
    Updating openssl certificates
    

    我们现在可以安装 ruby​​2:

    [root@ip-xx ~]# rvm reinstall 2.0.0 --with-openssl-dir=/usr/local/rvm/usr
    Removing /usr/local/rvm/src/ruby-2.0.0-p0...
    Removing /usr/local/rvm/rubies/ruby-2.0.0-p0...
    Installing Ruby from source to: /usr/local/rvm/rubies/ruby-2.0.0-p0, this may take a while depending on your cpu(s)...
    ruby-2.0.0-p0 - #downloading ruby-2.0.0-p0, this may take a while depending on your connection...
    ruby-2.0.0-p0 - #extracting ruby-2.0.0-p0 to /usr/local/rvm/src/ruby-2.0.0-p0
    ruby-2.0.0-p0 - #extracted to /usr/local/rvm/src/ruby-2.0.0-p0
    ruby-2.0.0-p0 - #configuring
    ruby-2.0.0-p0 - #compiling
    ruby-2.0.0-p0 - #installing 
    Removing old Rubygems files...
    Installing rubygems-2.0.3 for ruby-2.0.0-p0 ...
    Installation of rubygems completed successfully.
    Saving wrappers to '/usr/local/rvm/bin'.
    ruby-2.0.0-p0 - #adjusting #shebangs for (gem irb erb ri rdoc testrb rake).
    cp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/gem'? y
    cp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/irb'? y
    cp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/erb'? y
    cp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/ri'? y
    cp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/rdoc'? y
    cp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/testrb'? y
    cp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/rake'? y
    ruby-2.0.0-p0 - #importing default gemsets, this may take time ...
    Install of ruby-2.0.0-p0 - #complete 
    Making gemset ruby-2.0.0-p0 pristine.
    Making gemset ruby-2.0.0-p0@global pristine.
    
    [root@ip-xx ~]# ruby -v
    ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]
    

    还有 rails4:

    [root@ip-xx ~]# gem install rails -v 4.0.0beta1
    ...
    28 gems installed
    [root@ip-xx ~]# gem list
    
    *** LOCAL GEMS ***
    
    actionmailer (4.0.0.beta1)
    actionpack (4.0.0.beta1)
    activemodel (4.0.0.beta1)
    activerecord (4.0.0.beta1)
    activerecord-deprecated_finders (0.0.3)
    activesupport (4.0.0.beta1)
    arel (4.0.0.beta2)
    atomic (1.0.1)
    bigdecimal (1.2.0)
    builder (3.1.4)
    bundler (1.3.4)
    erubis (2.7.0)
    hike (1.2.1)
    i18n (0.6.4)
    io-console (0.4.2)
    json (1.7.7)
    mail (2.5.3)
    mime-types (1.21)
    minitest (4.3.2)
    multi_json (1.7.1)
    polyglot (0.3.3)
    psych (2.0.0)
    rack (1.5.2)
    rack-test (0.6.2)
    rails (4.0.0.beta1)
    railties (4.0.0.beta1)
    rake (10.0.3, 0.9.6)
    rdoc (4.0.0, 3.12.2)
    rubygems-bundler (1.1.1)
    rvm (1.11.3.6)
    sprockets (2.9.0)
    sprockets-rails (2.0.0.rc3)
    test-unit (2.0.0.0)
    thor (0.17.0)
    thread_safe (0.1.0)
    tilt (1.3.6)
    treetop (1.4.12)
    tzinfo (0.3.37)
    

    就是这样!

    【讨论】:

    • 其他需要考虑的事情。如果未安装 libxml2-devel 和 libxslt-devel,则 Nokogiri gem 安装失败:# yum install libxml2-devel libxslt-devel
    • 当前版本的 Passenger 不适用于 ruby​​2,因此您需要安装预发布版本,如下所述:github.com/FooBarWidget/passenger/pull/71#issuecomment-14714397
    • 刚刚使用它在 AWS EC2 实例上安装了 ruby​​ 2.0 rails 4.0 install。像魅力一样工作。我确实必须确保安装了 ruby​​ Racer,否则它会抱怨在尝试使用 rails 时缺少 javascript 运行时,但可以说超出了这个答案的范围
    • 顺便说一句,'rvm pkg' 已被弃用。至少这是我在安装 openssl 的步骤时收到的消息。到我这里回复的时候,Ruby 的当前稳定版本也不再是 2.0.0 而是 2.1.0。
    • 我今天创建了一个实例,并顺利安装了 amazon/2013.09/x86_64 和 Ruby 2.1.1,即我不必安装 rvm 的 openssl 包,只需 sudo yum updateyum groupinstall "Development Tools”\curl -sSL https://get.rvm.io | bash -s stablervm install ruby-2.1.1
    猜你喜欢
    • 2013-02-28
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2015-09-28
    • 1970-01-01
    相关资源
    最近更新 更多