问题: 我有两个应用程序A& B都在同一台服务器上运行。我在文件系统中有一个脚本
cd /data/B/
bundle exec rake -T
当我通过应用程序A的rails控制台运行脚本时,当控制台加载A的宝石并且rake任务失败时,它会出错
eg: system("sh ~/test.sh")
rake aborted!
LoadError: cannot load such file -- log4r
/home/kumolus/api/config/application.rb:9:in `require'
/home/kumolus/api/config/application.rb:9:in `<top (required)>'
/home/kumolus/api/Rakefile:1:in `require'
/home/kumolus/api/Rakefile:1:in `<top (required)>'
(See full trace by running task with --trace)
当我通过unix命令行运行脚本时(无论我的pwd如何)它都可以运行
cd ~
sh test.sh #works
cd /data/A #my application A's dir
sh ~/test.sh #also works
我需要它来通过rails工作。任何帮助?谢谢!
答案 0 :(得分:1)
我认为cd到该文件夹应该足以在执行cd 的shell进程中切换环境。试试这个。
进入项目B并执行
which bundle
在命令行中,并将结果复制到某处。 然后做
which rake
并复制其结果。
然后,切换到项目A并启动rails控制台。然后试试这个:
`cd /path/to/projectB; bundle exec rake -T`
如果这不起作用,请尝试:
`cd /path/to/projectB; <result of doing "which bundle" earlier> exec rake -T`
然后,如果它仍然无效,请尝试:
`cd /path/to/projectB; <result of doing "which bundle" earlier> exec <result of doing "which rake" earlier> -T`
答案 1 :(得分:1)
谢谢你的帮助, 由于捆绑器的默认行为,我找到了一个解决方案。
我将with_clean_env方法与块一起使用,然后执行。
谢谢团队 干杯