Distribuzione dell'app Sinatra su Dreamhost/Passenger con gemme personalizzate
Domanda
Ho un'app Sinatra che sto cercando di eseguire su Dreamhost che utilizza pony per inviare e-mail.Per rendere l'applicazione operativa fin dall'inizio (prima di aggiungere pony), ho dovuto farlo gem unpack rack
E gem unpack sinatra
nella directory vendor/, quindi questo era il mio 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
l'ho già fatto gem install pony
E gem unpack pony
(nel venditore/).Successivamente, ho provato ad aggiungere require 'vendor/sinatra/lib/pony'
su config.ru solo per far sì che il passeggero si lamenti dei pony dipendenze (mime-types, tmail) non sono stati trovati!
Là ha per essere un modo migliore di usare altre gemme e attenuare quelle lunghe, brutte, ridondanti requires
.qualche idea?
Soluzione
mi consiglia di creare il proprio percorso gioiello "da qualche parte", aggiungendo poi nel vostro config.ru
come:
ENV['GEM_PATH'] = xxx
Gem.clear_paths
quindi installare il vostro gemme in quella
Altri suggerimenti
Installa le gemme del rubino su DreamHost
http://c.kat.pe/post/ Installazione-ruby-gemme-on-DreamHost /
Cambia config.ru (lavori per Sinatra 1.0)
richiedere 'rubygems'
require '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
Speranza che aiuta qualcuno.
Sto usando pony e un sacco di altre gemme per il mio Sinatra. Dovrebbe funzionare bene anche per te. E 'solo quelle due righe (GEM_HOME e GEM_PATH) si deve aggiungere il vostro config.
Mi ci sono voluti anni per scoprire che puoi semplicemente usare "gem install sinatra" e gem capirà (perché le directory di sistema sono di sola lettura) che dovrai utilizzare una directory di installazione gem locale.A partire da ora, sembra non esserci alcun bisogno di impostare alcun ambiente speciale.Capisce di utilizzare $HOME/.gem come percorso gemma locale e tutto funziona.Non è affatto necessario richiedere "venditore/materiale".Ho scoperto che dovevo aggiungere $HOME/.gem/ruby/1.8/bin al mio percorso per eseguire i binari installati da gems.
Ecco il mio config.ru (per Dreamhost)
## Passenger should set RACK_ENV for Sinatra
require 'test'
set :environment, :development
run Sinatra::Application
Modifica successiva:Va tutto bene, ma rimane il problema Il passeggero non riesce a trovare le mie gemme all'avvio del lavoro.
Il mio config.ru è proprio semplice come:
require 'rubygems'
require 'vendor/sinatra/lib/sinatra.rb'
require 'app.rb'
e la testa 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