ter*_*ial 11 ruby filesystems dependencies ruby-on-rails
我正在使用的一些Ruby库使用如下require语句:
require File.dirname(__FILE__) + '/specification_helper.rb'
lib_dir = File.expand_path(File.join(File.dirname(__FILE__), "lib"))
require File.join(File.dirname(__FILE__), 'lib/tools', 'version')
require File.expand_path(File.join(File.dirname(__FILE__), 'datautils', 'conn'))
Run Code Online (Sandbox Code Playgroud)
这种格式不会使您的代码不必要地依赖于文件系统的结构吗?
为什么作者这样做?
是否可以(安全地)更改此代码以消除对文件系统的依赖性?
blt*_*txd 10
我实际上在生产代码中使用这个方案.
要求相对于当前源位置的文件有几个优点:
如果您更喜欢使用修改后的ruby搜索路径,可以通过多种方式执行此操作:
解决方案1意味着控制如何调用ruby.您需要一个脚本来启动该程序,例如:
@echo off
REM my_script.cmd
set srcdir=%~dp0\..\path\to\source
ruby -I %srcdir% %srcdir%\my_script.rb
Run Code Online (Sandbox Code Playgroud)
要么:
#!/bin/sh
srcdir=$(cd $(dirname $0)/../path/to/source && pwd)
exec ruby -I $srcdir $srcdir/my_script.rb
Run Code Online (Sandbox Code Playgroud)
解决方案2是可行的但不避免碰撞.您通常会执行以下操作:
$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)))
Run Code Online (Sandbox Code Playgroud)
解决方案3是不可取的,您对环境变量的依赖性越小,您就越好.
| 归档时间: |
|
| 查看次数: |
11016 次 |
| 最近记录: |