我有一个Sinatra应用程序,我试图在Dreamhost上运行,它利用小马发送电子邮件。为了在一开始就启动并运行应用程序(在添加小马之前),我必须将gem unpack rack
和gem 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 pony
和gem unpack pony
(进入vendor /)。之后,我尝试将require 'vendor/sinatra/lib/pony'
添加到config.ru,只是让Passenger抱怨小马的依赖(mime-types,tmail)也没找到!
有更好的方式来使用其他宝石,并调低那些冗长,丑陋,多余的requires
。有什么想法吗?
答案 0 :(得分:4)
我建议您“在某处”创建自己的宝石路径,然后在config.ru
中添加它
像:
ENV['GEM_PATH'] = xxx
Gem.clear_paths
然后将宝石安装到
中答案 1 :(得分:3)
在dreamhost上安装Ruby gems
http://c.kat.pe/post/installing-ruby-gems-on-dreamhost/
更改config.ru(适用于Sinatra 1.0)
要求'rubygems'
要求'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)。
答案 2 :(得分:1)
我花了很长时间才发现你可以简单地使用“gem install sinatra”并且gem会弄明白(因为系统目录是只读的)你将需要使用本地gem安装目录。截至目前,似乎根本没有必要设置任何特殊环境。它计算出使用$ HOME / .gem作为本地宝石路径,一切正常。根本不需要'供应商/东西'。我确实发现我必须在我的路径中添加$ 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。
答案 3 :(得分: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