我们如何 运行 一个应用程序的 rake 任务通过另一个应用程序(都 运行 在同一台服务器上)?
How can we run a rake task of one application through another application (both running on the same server)?
问题:
我在同一台服务器上有两个应用程序 A 和 B 运行ning。我在文件系统中有一个脚本
cd /data/B/
bundle exec rake -T
当我 运行 脚本通过应用程序 A 的 rails 控制台时,它会出错,因为控制台会加载 A 的 gem 并且 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 命令行 运行 脚本时(不管我的密码如何)它都有效
cd ~
sh test.sh #works
cd /data/A #my application A's dir
sh ~/test.sh #also works
我需要它来完成 rails.Any 帮助吗?谢谢!
我认为 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`
感谢大家的帮助,
由于捆绑程序的默认行为,我找到了解决方案。
我对块使用了 with_clean_env 方法,它被执行了。
感谢团队
干杯
问题: 我在同一台服务器上有两个应用程序 A 和 B 运行ning。我在文件系统中有一个脚本
cd /data/B/
bundle exec rake -T
当我 运行 脚本通过应用程序 A 的 rails 控制台时,它会出错,因为控制台会加载 A 的 gem 并且 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 命令行 运行 脚本时(不管我的密码如何)它都有效
cd ~
sh test.sh #works
cd /data/A #my application A's dir
sh ~/test.sh #also works
我需要它来完成 rails.Any 帮助吗?谢谢!
我认为 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`
感谢大家的帮助, 由于捆绑程序的默认行为,我找到了解决方案。
我对块使用了 with_clean_env 方法,它被执行了。
感谢团队 干杯