安装后,Rubygems无法直接找到sinatra

时间:2014-07-16 16:40:15

标签: ruby rubygems

我无法弄清楚为什么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/

1 个答案:

答案 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​​gems"
  • 修改$:
  • 安装缺少的宝石

在您要运行应用程序的服务器上,而不仅仅是ruby app,您将运行bundle exec ruby app