【问题标题】:Rails 3 - Whenever gem error: /usr/bin/env: ruby: No such file or directoryRails 3 - 每当 gem 错误时:/usr/bin/env: ruby​​: No such file or directory
【发布时间】:2011-11-26 20:47:12
【问题描述】:

当使用 'whenever gem' 时,我在日志中得到一个错误:

/usr/bin/env: ruby: No such file or directory

当我手动运行作业时它可以工作。我已经用 RVM 安装了所有东西。

我使用which 命令找到了我的 Ruby 安装位置,我得到了:

kevin@lovely:/opt/personal$ which ruby
/home/kevin/.rvm/rubies/ruby-1.9.2-p290/bin/ruby

我检查了我的 $PATH 变量,它返回的位置:

kevin@lovely:/opt/personal$ echo $PATH
/home/kevin/.rvm/gems/ruby-1.9.2-p290/bin:/home/kevin/.rvm/gems/ruby-1.9.2-p290@global/bin:/home/kevin/.rvm/rubies/ruby-1.9.2-p290/bin:/home/kevin/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

我认为这应该设置正确,但我可能错了,因为它不起作用。谁能指出我正确的方向?

如果你有兴趣,这就是我每次 crontab 输出的内容:

# Begin Whenever generated tasks for: rss
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /bin/bash -l -c 'cd /opt/personal && script/rails runner -e development '\''FeedEntry.update_from_feed("http://lovely/blog/feed/")'\'' >> /opt/personal/log/feedzirra.log 2>&1'

【问题讨论】:

    标签: ruby-on-rails-3 cron rvm whenever


    【解决方案1】:

    您可能早就过了这个问题,但供将来参考:

    我遇到了类似的问题,只是我遇到了

    /usr/bin/env: ruby: No such file or directory
    

    原来文件 script\rails 的第一行是#!/usr/bin/env ruby1.9.1,它告诉系统使用 ruby​​1.9.1 调用它,正如here 解释的那样。但它应该是#!/usr/bin/env ruby1.9.3,因为那是我安装的版本。

    希望这对将来的人有所帮助:)

    【讨论】:

    • 最好指定文件的路径(在应用程序文件夹内)
    【解决方案2】:

    我的问题是 ruby​​ 位于 /usr/local/bin 中,它不在无头 bash 的路径中。所以我只是在 schedule.rb 中创建了我的 rake 任务行:

    job_type :rake, "cd :path && PATH=/usr/local/bin:$PATH RAILS_ENV=:environment bundle exec rake :task :output"
    

    【讨论】:

      【解决方案3】:

      无论何时在生产中使用 RVM 和捆绑器,我都能成功使用。以下是我的 capistrano 设置的相关部分,可能会对您有所帮助:

      # rvm and bundler integration 
      require 'rvm/capistrano'
      require 'bundler/capistrano'
      
      # RVM environment
      set :rvm_ruby_string, "ruby-1.9.2@mygemset"
      
      # crontab
      set :whenever_roles, :cron
      set :whenever_command, "bundle exec whenever"
      set :whenever_environment, defer { stage }
      require 'whenever/capistrano'
      

      :whenever_environment 设置是因为我使用的是多阶段部署设置。如果需要,您可以忽略它或将其设置为与您的设置匹配的字符串。

      大部分信息可以在自述文件中“Capistrano 集成”和“RVM 集成”部分标题下的whenever github page 中找到。

      希望对你有帮助。

      【讨论】:

        【解决方案4】:

        我解决的问题和杜克差不多。除了我发现 $PATH 变量对我不起作用。

        sys_path = '/home/[user]/.rbenv/versions/[ruby_version]/bin'
        
        job_type :runner,  "cd :path && PATH=#{sys_path} bin/rails runner -e :environment ':task' :output"
        job_type :rake,    "cd :path && PATH=#{sys_path} :environment_variable=:environment bin/bundle exec rake :task --silent :output"
        

        【讨论】:

          【解决方案5】:

          如果这些都不适合你,试试:

          gem install rails
          

          这为我完成了这项工作,希望它有所帮助!

          【讨论】:

            猜你喜欢
            • 2014-01-20
            • 2014-12-02
            • 2015-10-07
            • 2021-03-28
            • 1970-01-01
            • 2018-12-23
            • 2014-11-06
            • 1970-01-01
            • 2015-07-28
            相关资源
            最近更新 更多