Running foreman from a rake task
我有以下rake任务:
1 2 3 4 5 6 7 8 | namespace :foreman do task :dev do `foreman start -f Procfile.dev` end end desc"Run Foreman using Procfile.dev" task :foreman => 'foreman:dev' |
forman命令在shell中工作正常,但是当我运行
1 2 | /Users/me/.gem/ruby/2.0.0/gems/bundler-1.5.2/lib/bundler/rubygems_integration.rb:240:in `block in replace_gem': foreman is not part of the bundle. Add it to Gemfile. (Gem::LoadError) from /Users/me/.gem/ruby/2.0.0/bin/foreman:22:in `<main>' |
福尔曼特别声明:
1 | Ruby users should take care not to install foreman in their project's Gemfile |
那么我怎样才能让这个任务运行呢?
如果必须通过rake使其工作,请尝试通过backtick更改shell,以使用到系统范围的forman二进制文件的硬编码路径。
1 | `/global/path/to/foreman start -f Procfile.dev` |
您只需要使用"哪个"或"定位"或类似的工具来确定在Bundler上下文之外工作的路径。如果您使用的是rbenv,那么这就足够了:
1 2 | $ rbenv which rake /home/name/.rbenv/versions/1.9.3-p448/bin/rake |
我希望这能帮助你前进。
不确定这是否可行,但是您可以显式导出与shell关联的环境变量,然后调用
步骤
从shell中获取
1 | printenv >> shell.env |
从Rails环境中获取环境变量
1 2 3 4 5 | namespace :foreman_test do task :dev do `printenv >> rails.env` end end |
比较这两个变量,找出变化的环境变量,并在
1 2 3 4 5 | namespace :foreman do task :dev do `export PATH=/original/path:/value && GEM_DIR=/some/folder && foreman start -f Procfile.dev` end end |
如果必须是rake任务,请尝试此操作(根据此答案):
1 2 3 4 5 | namespace :foreman do task :dev do sh"foreman start -f Procfile.dev" end end |
如果它不一定是rake任务,那么我有一个简单的bash脚本来启动一个运行良好的特定项目:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/bin/bash export PROJECT_DIR=`pwd` export PORT=$1 source"$HOME/.rvm/scripts/rvm" unset BUNDLE_GEMFILE unset BUNDLE_BIN_PATH unset RUBYOPT unset GEM_HOME unset GEM_PATH (cd <project full path> && exec foreman start -p $PORT) |
沿着这条线往下走一点,我就是这样起诉Chruby的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | namespace :foreman do task :dev do # 1. Load .bash_profile to ensure chruby is available # 2. Switch the ruby version to the one defined in .ruby-version # 3. Start foreman system %( source ~/.bash_profile chruby"$(cat .ruby-version)" foreman start --procfile Procfile.dev ) end end desc"Run Foreman using Procfile.dev" task :foreman => 'foreman:dev' |