【问题标题】:Switch ruby when restarting rails app deployed on Passenger重新启动部署在乘客上的 Rails 应用程序时切换 ruby
【发布时间】:2011-04-05 19:08:06
【问题描述】:

重新启动部署在 Passenger 上的 Rails 应用程序时,是否可以从 Ruby 1.8.7 切换到 1.9.2?应该可以在 httpd.conf 中更改PassengerRuby 并重新启动Apache。我想知道如何在不每次都重新启动 Apache 的情况下完成它。

更多信息:我们有两个不同的应用程序,一个在 Rails 2.3.8 上,一个在 3.0.5 上,名称相同,并且希望在它们之间切换以进行测试。

谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby apache ruby-on-rails-3 passenger


    【解决方案1】:

    是的,您可以切换您使用的 ruby​​ 版本。使用 rvm (http://rvm.beginrescueend.com/) 让生活变得轻松。然后你可以在不同的 ruby​​ 环境中安装乘客 gem,当你在每个环境中安装时,passenger-install-apache2-module 命令会告诉你在 apache 配置文件中放置什么。例如,我现在是(mac osx - 在其他 *nixes 中应该类似):

    ### system ruby and passenger
    #LoadModule passenger_module /Library/Ruby/Gems/1.8/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
    #PassengerRoot /Library/Ruby/Gems/1.8/gems/passenger-3.0.7
    #PassengerRuby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
    
    ### rvm gemset 1.8.7@rails2.3.11 ruby and passenger
    LoadModule passenger_module /Users/matt/.rvm/gems/ruby-1.8.7-p334@rails2.3.11/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
    PassengerRoot /Users/matt/.rvm/gems/ruby-1.8.7-p334@rails2.3.11/gems/passenger-3.0.7
    PassengerRuby /Users/matt/.rvm/wrappers/ruby-1.8.7-p334@rails2.3.11/ruby
    

    我可以注释/取消注释相应的注释并使用不同版本的 ruby​​ 重新启动 apache。这也适用于 ruby​​ 1.9.2 和 ruby​​ 企业版。

    【讨论】:

    • 这仅适用于一个版本的 ruby​​,但您可以通过使用“捆绑器”并在应用程序的“Gemfiles”中指定 Rails 版本来加载不同版本的 Rails。
    【解决方案2】:

    您不需要重新编译。您只需要更改 Web 服务器中的 PassengerRuby 选项。但是,您确实需要重新启动 Web 服务器,仅触摸 restart.txt 是不够的。

    您还可以使用Passenger Standalone 来替代 bioneuralnet 提到的 Thin/Mongrel/Unicorn 反向代理设置。事实上,我们有一篇博客文章专门介绍了通过 Passenger Standalone 运行多个 Ruby 版本:http://blog.phusion.nl/2010/09/21/phusion-passenger-running-multiple-ruby-versions/

    【讨论】:

      【解决方案3】:

      由于Passenger 将自己“嵌入”到Apache 中,我不可能在不重新启动的情况下切换ruby 解释器(甚至可能重新编译Passenger?)。要实现这种灵活性,您可能需要研究某种反向代理设置,其中涉及在 Apache 或 Nginx 后面运行的独立应用服务器(如 Thin、Unicorn 或 Mongrel)。

      如果这是不可能的,那么 Rails 2.3.8 和 3.0.5 应用程序完全可以在 Ruby 1.8.7 上运行。我在 1.8.7 上部署了几个 Rails 3 应用程序,但希望很快就会改变。假设您的 3.0.5 应用程序没有明确的 1.9 依赖项,为什么不能在单独的虚拟主机上在 1.8 上并排运行它们?

      【讨论】:

        猜你喜欢
        • 2014-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多