Развертывание приложения Sinatra на Dreamhost/Passenger с пользовательскими драгоценными камнями
У меня есть приложение 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
(в поставщика /). После этого я попытался добавить require 'vendor/sinatra/lib/pony'
только на config.ru, чтобы Пассажир жаловался на то, что зависимости пони (mime-types, tmail) тоже не найдены!
Должен быть лучший способ использовать другие драгоценные камни и смягчить эти длинные, уродливые, избыточные requires
, Какие-нибудь мысли?
4 ответа
Я бы порекомендовал создать свой собственный путь к драгоценным камням где-то, а затем добавить его в свой config.ru
лайк:
ENV['GEM_PATH'] = xxx
Gem.clear_paths
затем установите свои драгоценные камни в это
Установите Ruby Gems на Dreamhost
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
Надеюсь, это поможет кому-то.
Я использую пони и много других драгоценных камней для моей Синатры. Это должно хорошо работать и для вас. Это просто те две строки (GEM_HOME и GEM_PATH), которые вы должны добавить в свою конфигурацию.
Мне потребовалось много времени, чтобы найти, что вы можете просто использовать "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
Позже редактирование: это все хорошо, но остается проблема, что Пассажир не может найти мои драгоценные камни, когда работа первоначально запускается.
Мой config.ru прост как:
require 'rubygems'
require 'vendor/sinatra/lib/sinatra.rb'
require 'app.rb'
и app.rb head:
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