【问题标题】:Can't start thin server as service, RubyGems: Could not find thin无法将瘦服务器作为服务启动,RubyGems:找不到瘦服务器
【发布时间】:2012-04-30 20:19:50
【问题描述】:

我使用以下说明在带有 Rails 3.2.3 的 Ubuntu 10.04.4 上安装和配置瘦服务器作为服务:

http://articles.slicehost.com/2008/5/6/ubuntu-hardy-thin-web-server-for-ruby

瘦服务器运行良好,使用“瘦启动”从应用程序根目录运行

但是,当我尝试使用以下任何命令运行服务时:

service thin start
sudo service thin start
/etc/init.d/thin start
sudo /etc/init.d/thin start

我收到以下错误:

/home/myuser/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find thin (>= 0) amongst [bigdecimal-1.1.0, io-console-0.3, json-1.5.4, minitest-2.5.1, rake-0.9.2.2, rdoc-3.9.4] (Gem::LoadError)
    from /home/myuser/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
    from /home/myuser/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems.rb:1210:in `gem'
    from /home/myuser/.rvm/gems/ruby-1.9.3-p125/bin/thin:18:in `<main>'

这似乎不是 PATH 的问题,'which thin' 正确返回:

home/myuser/.rvm/gems/ruby-1.9.3-p125/bin/thin

我还验证了 **/bin/thin 的存在,无论它被引用到哪里

我尝试使用“gem uninstall thin”、“gem install thin”重新安装 gem,但没有成功

以前有人经历过吗?我只发现了这个问题的另一个实例: Cannot restart thin via remote machine

这个问题似乎只是通过 ssh,而我什至无法在本地启动瘦服务

谢谢

【问题讨论】:

  • 您所遵循的指南适用于旧版本的 ubuntu,10.04 已经改变了初始化脚本的工作方式。此外,为什么要使用/etc/init.d 瘦身?而不是瘦 -d?
  • 试图让它在启动时作为服务运行,我是否应该制作一个运行 Thin -d 的 sh 文件并将其放在某个地方以便在启动时运行?

标签: ruby-on-rails thin


【解决方案1】:

由于从您的堆栈跟踪看来您正在使用 rvm,并且您正在使用作为 gem 安装的瘦,因此您需要使用 rvm 包装器才能使服务正常工作。首先删除服务端重新安装它rvmsudo thin install而不是sudo thin install。您还应该在创建配置文件时使用rvmsudo thin config

要创建一个包装器,

rvm wrapper <your_rvm_ruby_version>@<your_rvm_gemset_in_use> bootup thin

您可以分别使用rvm listrvm gemset 列表查找名称。包装器的名称为bootup_thin,您可以通过它确认它使用的是正确的rvm,bootup_thin。你可以在创建它时给它起任何你想要的名字。然后你需要通过

编辑瘦脚本
sudo nano /etc/init.d/thin

把原来的DAEMON改成

DAEMON=location_of_bootup_thin 

这应该是which bootup_thin 的结果。然后就可以启动服务了。

sudo service thin start

希望对你有帮助

【讨论】:

    【解决方案2】:

    似乎每个启动作业都加载了自己的外壳。所以,在尝试开始瘦之前尝试加载rvm

    #! /bin/sh
    # Load RVM into a shell session *as a function*
    if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
    
      # First try to load from a user install
      source "$HOME/.rvm/scripts/rvm"
    
    elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
    
      # Then try to load from a root install
      source "/usr/local/rvm/scripts/rvm"
    
    else
    
      printf "ERROR: An RVM installation was not found.\n"
    
    fi
    
    rvm use 1.9.3
    cd /path/to/your/application/code
    bundle exec thin -d
    

    将其放入/etc/init.d/thin_service 并运行

    $ sudo update-rc.d  thin_service defaults
    

    最后,您只需键入sudo start thin_servicesudo stop start_thin 即可进行测试,而无需重新启动。如果这仍然不起作用,请尝试 railsgems-bundler 和 rvm 包装器。另外,请阅读rvm's Deployment Best Practices

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 2015-04-10
      • 1970-01-01
      相关资源
      最近更新 更多