Dreamhost/Custom Gems로 Sinatra 앱 배포
문제
나는 Dreamhost에서 전자 메일을 보내기 위해 조랑말을 사용하는 Sinatra 앱을 가지고 있습니다. 처음에 응용 프로그램을 시작하고 실행하기 위해 (조랑말을 추가하기 전에) gem unpack rack
그리고 gem unpack sinatra
공급 업체/ 디렉토리로, 이것은 내 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 의존성 (마임 유형, tmail)도 발견되지 않습니다!
거기 가지다 다른 보석을 사용하고 길고 추악하고 중복되는 더 좋은 방법이 되려면 requires
. 이견있는 사람?
해결책
나만의 보석 경로 "어딘가"를 만드는 것이 좋습니다. config.ru
처럼:
ENV['GEM_PATH'] = xxx
Gem.clear_paths
그런 다음 보석을 설치하십시오
다른 팁
Dreamhost에 Ruby Gems를 설치하십시오
http://c.kat.pe/post/installing-ruby-gems-on-dreamhost/
config.ru 변경 (Sinatra 1.0 용 작업)
'rubygems'필요
'공급 업체/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을 내 경로에 추가해야한다는 것을 알았습니다.
여기 내 config.ru (dreamhost for 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 헤드 :
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