3

我有一个 Sinatra 应用程序,我试图在 Dreamhost 上运行它,它利用小马发送电子邮件。为了让应用程序在一开始就启动并运行(在添加 pony 之前),我必须gem unpack rack进入gem unpack sinatravendor/ 目录,所以这是我的 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进入供应商/)。之后,我尝试添加require 'vendor/sinatra/lib/pony'到 config.ru 只是让乘客抱怨 pony 的依赖项(mime-types,tmail)也找不到!

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

4

4 回答 4

4

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

ENV['GEM_PATH'] = xxx
Gem.clear_paths

然后将您的宝石安装到其中

于 2009-12-02T04:12:09.643 回答
3

在 Dreamhost 上安装 Ruby gem

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

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

需要“红宝石”

需要'供应商/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)。

于 2010-04-03T14:47:33.987 回答
1

我花了很长时间才发现您可以简单地使用“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 找不到我的宝石

于 2010-02-17T00:53:31.920 回答
0

我的 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
于 2010-01-08T16:59:38.497 回答