我无法弄清楚为什么rubygems无法在以下代码中的 require" sinatra" 行找到sinatra。我试图写红宝石以确保安装了sinatra ..
红宝石
$:.push("/home/xxxx/ruby/gems")
require 'rubygems'
begin
gem "sinatra"
rescue LoadError
system("gem install sinatra")
Gem.clear_paths
end
require 'sinatra'
get "/" do
"Hello, world!"
end
错误 - 在线:要求' sinatra'
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require': no such file to load -- sinatra (LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
我使用bash命令' ruby app.rb'运行脚本,如果相关的话。
Gem env返回:(其中/ home / xxxx / ruby / gems是宝石的正确位置)
RubyGems Environment:
- RUBYGEMS VERSION: 1.8.25
- RUBY VERSION: 1.8.7 (2012-06-29 patchlevel 370) [x86_64-linux]
- INSTALLATION DIRECTORY: /home/xxxx/ruby/gems
- RUBY EXECUTABLE: /usr/bin/ruby
- EXECUTABLE DIRECTORY: /home/xxxx/ruby/gems/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /home/xxxx/ruby/gems
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- "gempath" => []
- "gem" => "--remote --gen-rdoc --run-tests"
- "rdoc" => "--inline-source --line-numbers"
- "gemhome" => "/home/xxxx/ruby/gems"
- REMOTE SOURCES:
- http://rubygems.org/
答案 0 :(得分:1)
我建议使用bundler。
首先,您的开发机器和服务器上都有gem install bundler
。
接下来创建一个名为 Gemfile 的文件,其中包含以下内容:
source "https://rubygems.org"
gem "sinatra"
# add a "gem" line for any other gems your application needs
(命令bundle init
将为您创建一个骨架Gemfile。)
然后你做一个"捆绑安装"安装宝石。这将创建一个" Gemfile.lock"提供每个gem的确切版本的文件。该文件将与Gemfile一起检入您的版本控制。
一旦将该代码分发到服务器,然后"捆绑安装"在服务器上安装完全相同的宝石。
在您的应用程序中,执行 not :
在您要运行应用程序的服务器上,而不仅仅是ruby app
,您将运行bundle exec ruby app
。