【问题标题】:Deploying Sinatra app on Dreamhost/Passenger with custom gems使用自定义 gem 在 Dreamhost/Passenger 上部署 Sinatra 应用程序
【发布时间】:2010-12-22 05:54:30
【问题描述】:

我有一个 Sinatra 应用程序,我正试图在 Dreamhost 上运行它,它使用小马发送电子邮件。为了让应用程序在一开始就启动并运行(在添加 pony 之前),我必须将 gem unpack rackgem unpack sinatra 放入 vendor/ 目录,所以这是我的 config.ru:

require 'vendor/rack/lib/rack'
require 'vendor/sinatra/lib/sinatra'

set :run, false
set :environment, :production
set :views, "views"

require 'public/myapp.rb'
run Sinatra::Application

我已经完成了gem install ponygem unpack pony(进入vendor/)。之后,我尝试将 require 'vendor/sinatra/lib/pony' 添加到 config.ru 只是让乘客抱怨小马的 依赖项(mime-types,tmail)也找不到!

必须有一种更好的方式来使用其他宝石并淡化那些冗长、丑陋、多余的requires。有什么想法吗?

【问题讨论】:

    标签: ruby sinatra gem dreamhost pony


    【解决方案1】:

    我建议在“某处”创建您自己的 gem 路径,然后将其添加到您的 config.ru 喜欢:

    ENV['GEM_PATH'] = xxx
    Gem.clear_paths
    

    然后将你的 gem 安装到其中

    【讨论】:

    【解决方案2】:

    我的 config.ru 很简单:

    require 'rubygems'
    require 'vendor/sinatra/lib/sinatra.rb'
    require 'app.rb'
    

    和 app.rb 头:

    require 'yaml'
    require 'haml'
    require 'ostruct'
    require 'date'
    require 'pp'
    
    module FlytoFB
        log = File.new("sinatra.log", "a")
        STDOUT.reopen(log)
        STDERR.reopen(log)
    
        configure do
    
                enable :logging, :dump_errors
                set :app_file, __FILE__
                set :reload, true
                set :root, File.dirname(__FILE__)
                set :environment, :production
                set :env, :production
                set :run, false
    
                set :raise_errors, true
          set :public, 'public'
    
                error do
                        e = request.env['sinatra.error']
                        puts e.to_s
                        puts e.backtrace.join("\n")
                        "Application Error!"
                end
    
                not_found do
                  "Page not found!"
          end
    

    【讨论】:

      【解决方案3】:

      我花了很长时间才发现您可以简单地使用“gem install sinatra”,gem 会发现(因为系统目录是只读的)您需要使用本地 gem 安装目录。到目前为止,似乎根本不需要设置任何特殊环境。它发现使用 $HOME/.gem 作为本地 gem 路径,一切正常。根本不需要 require 'vendor/stuff'。我确实发现我必须将 $HOME/.gem/ruby/1.8/bin 添加到我的路径中才能执行 gems 安装的二进制文件。

      这是我的 config.ru(用于 Dreamhost)

      ## Passenger should set RACK_ENV for Sinatra
      require 'test'
      set :environment, :development
      run Sinatra::Application
      

      稍后编辑:这一切都很好,但仍然存在Passenger can't find my gems when the job initially starts up 的问题。

      【讨论】:

        【解决方案4】:

        在 Dreamhost 上安装 Ruby gems

        http://c.kat.pe/post/installing-ruby-gems-on-dreamhost/

        更改 config.ru(适用于 Sinatra 1.0)

        需要“红宝石”

        需要'vendor/sinatra/lib/sinatra.rb'

        ENV['GEM_HOME'] = '/home/username/.gems'
        ENV['GEM_PATH'] = '$GEM_HOME:/usr/lib/ruby/gems/1.8'
        require 'rubygems'
        Gem.clear_paths
        
        disable :run, :reload
        
        set :environment, :production
        
        require 'yourapp'
        run Sinatra::Application
        

        希望对某人有所帮助。

        我正在为我的 Sinatra 使用小马和许多其他宝石。它也应该适合你。您必须在配置中添加这两行(GEM_HOME 和 GEM_PATH)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-25
          • 2023-04-07
          • 2012-04-11
          • 2013-06-13
          • 1970-01-01
          相关资源
          最近更新 更多