【问题标题】:Ruby `require': cannot load such file -- fcgi DreamhostRuby `require':无法加载此类文件 -- fcgi Dreamhost
【发布时间】:2015-12-16 18:57:30
【问题描述】:

尝试运行 ruby​​ 脚本 ruby dispatch.fcgi 时出现错误

/pathtorvm/.rvm/rubies/ruby-2.2.0/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- fcgi (LoadError)
from /pathtorvm/.rvm/rubies/ruby-2.2.0/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from dispatch.fcgi:8:in `<main>'

我正在尝试关注 Dreamhost 的 Rvm/Rails 安装指南以及多篇博文:

Configuring Rails projects with FastCGI for Dreamhost shared hosting
RAILS 4.0.0 WITH RUBY 2.0 ON A DREAMHOST SHARED SERVER

我正在成功使用 rvm => 1.26.11,ruby => 2.2.0,rails 4.2.2,甚至尝试过 ruby​​ 2.0.0。我试图将我所有的 env_vars 指向正确的位置,但我不能 100% 确定 $PATH var 设置正确。

我正在使用 bundler gem 来安装我的 gem,并在 Gemfile 中包含 require 'fcgi'。我还删除了 Gemfile.lock 文件并尝试再次运行 bundle install 。我认为也许 ruby​​-2.2.0 引起了问题,但 ruby​​-2.0.0 产生了相同的结果 & RAILS 4.0.0 WITH RUBY 2.0 ON A DREAMHOST SHARED SERVER 清楚地表明它与 ruby​​-2.0.0 一起使用

dispatch.fcgi

#!/pathtorvm/.rvm/rubies/ruby-2.2.0/bin/ruby

# Dreamhost clears environment variables when calling dispatch.fcgi, set again
ENV['RAILS_ENV'] = 'production'
ENV['HOME'] ||= `echo ~`.strip
ENV['GEM_HOME'] = File.expand_path('~/.gems')
ENV['GEM_PATH'] = File.expand_path('~/.gems')
require 'fcgi'
require '/pathtoapplication'sfile/config/boot.rb'
require '/pathtoapplication'sfile/config/environment.rb'

class Rack::PathInfoRewriter
        def initialize(app)
                @app = app
        end

        def call(env)
                env.delete('SCRIPT_NAME')
            parts = env['REQUEST_URI'].split('?')
            env['PATH_INFO'] = parts[0]
            env['QUERY_STRING'] = parts[1].to_s
            @app.call(env)
        end
end

#Rack::Handler::FastCGI.run Rack::PathInfoRewriter.new(ApplicationNamefoundin~../config/application.rb::Application)

【问题讨论】:

  • 您是否尝试过对 .rb 文件使用 load 而不是 require
  • 尝试给出 dispatch.fcgi:8:in `load': cannot load such file -- fcgi (LoadError) from dispatch.fcgi:8:in `
    '
  • 听起来很蠢,但是……看来.rb文件的路径有问题。如果boot.rbenvironment.rb 位于脚本所在位置的文件夹中,请尝试使用./config/yourrbfilehere.rb 作为路径,并使用load。祝你好运。
  • 不,这正是我的想法
  • 好的,请原谅我这个愚蠢的假设:您是否尝试安装 gem fcgi?你的Gemfile 里有吗?

标签: ruby-on-rails ruby rubygems fastcgi dreamhost


【解决方案1】:

原因是因为我使用的是rvm。在dispatch.fcgi

ENV['GEM_HOME'] = File.expand_path('~/.gems')
ENV['GEM_PATH'] = File.expand_path('~/.gems')

应该改为(注意 /gems/ 而不是 /.gems/ -它将默认为 Dreamhost 的 ruby​​ 而不是我的自定义安装)

ENV['GEM_HOME'] = File.expand_path('~/.rvm/gems/ruby-2.2.0')
ENV['GEM_PATH'] = File.expand_path('~/.rvm/gems/ruby-2.2.0')

感谢Dreamhost 的帮助

【讨论】:

    【解决方案2】:

    以上内容实际上对我没有帮助。我不得不添加这个:

    require 'rubygems'
    Gem.clear_paths
    require 'fcgi'
    

    【讨论】:

      猜你喜欢
      • 2012-06-11
      • 2013-09-30
      • 2012-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-10
      相关资源
      最近更新 更多