我知道我可以运行特定的迁移:
rake db:migrate:up VERSION=20080906120000
Run Code Online (Sandbox Code Playgroud)
但我可以针对我的测试数据库运行特定的迁移吗?以下工作会吗?
RAILS_ENV=test rake db:migrate:up VERSION=20080906120000
Run Code Online (Sandbox Code Playgroud)
理论上,在默认模式下运行迁移(应该影响开发数据库)然后运行rake db:test:prepare应该完成工作,但是在我做完测试数据库之后我发现了一些奇怪的东西,我需要在测试中运行特定的迁移数据库以帮助我排除故障.
我只是尝试上面的rake命令,除了我正在我的开发数据库上进行长数据播种运行,我不能冒着迁移干扰它的风险,所以我想我会看到是否有人知道在我自己确定之前的答案.:)
::Logger每次写入后,标准Ruby记录器(即)是否可以自动刷新?
更新:我正在设置自定义日志格式化程序,根据如何在rails日志中获取ruby中的时间戳:
class Foo
def initialize(params = {})
@logger = Logger.new $stdout
@logger.formatter = LogFormatter.new
@logger.level = params.include?(:log) ? params[:log] : Logger::INFO
# ...
end
class LogFormatter < Logger::Formatter
def call(severity, time, progname, message)
timestamp = time.iso8601
log_msg = "#{timestamp}#{" [#{severity}]" if %w{ERROR WARN}.include? severity} "
if message.is_a? Exception
log_msg += "#{message.message}"
log_msg += ": #{message.backtrace.join "\n#{timestamp} "}" unless message.backtrace.blank?
else
log_msg += message
end
"#{log_msg}\n"
end
end
end
Run Code Online (Sandbox Code Playgroud)
我尝试使用来自idlefingers的建议如下:
def initialize(params = {}) …Run Code Online (Sandbox Code Playgroud) 我想提供一个可以覆盖的默认值.我知道我可以使用三元组,如下所示:
(def foo (if (not (nil? bar)) bar baz))
Run Code Online (Sandbox Code Playgroud)
但是肯定在Clojure中有一种更惯用的方式来说"使用吧,或者如果bar是零则为baz.
有什么建议?
使用IDE for Java的一个好处就是自动重构.我遇到的问题是,在使用Refactor> Move将类移动到另一个包(在文件系统中移动文件本身)之后,git status显示旧位置的文件已被删除,而新文件中的文件已被删除位置已添加.
我发现的解决方法很笨重:
mv src/com/example/newpackage/Foo.java src/com/example/oldpackage/Foo.java
git mv src/com/example/oldpackage/Foo.java src/com/example/newpackage/Foo.java
Run Code Online (Sandbox Code Playgroud)
有没有办法(当使用Eclipse的Git插件时)让重构做一个git mv而不是一个天真的文件系统移动?
给定Ruby 1.8.7中的字符串(没有支持带有\ p {}的Unicode属性的真棒Oniguruma正则表达式引擎),我希望能够确定该字符串是否包含一个或多个中文,日文或韩文字符; 即
class String
def contains_cjk?
...
end
end
>> '???'.contains_cjk?
=> true
>> '?? ????'.contains_cjk?
=> true
>> '????????'.contains_cjk?
=> true
>> 'Watashi ha bakana gaijin desu.'.contains_cjk?
=> false
Run Code Online (Sandbox Code Playgroud)
我怀疑这将归结为查看字符串中的任何字符是否在Unihan CJKV Unicode块中,但我认为值得问一下是否有人知道Ruby中的现有解决方案.
我正在编写一个Bourne shell脚本,并且输入密码如下:
echo -n 'Password: '
read password
Run Code Online (Sandbox Code Playgroud)
显然,我不希望密码被回显到终端,所以我想在读取期间关闭回声.我知道有办法解决这个问题stty,但是当我阅读联机帮助页时,我会问社区的好处.;)
我正在尝试使用C++标准库的find算法,如下所示:
template<class T>
const unsigned int AdjacencyList<T>::_index_for_node(
const std::vector<T>& list, const T& node
) throw(NoSuchNodeException)
{
std::vector<T>::iterator iter = std::find(list.begin(), list.end(), node);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译时,我得到以下错误:
In file included from ../AdjacencyList.cpp:8:
../AdjacencyList.h: In member function ‘const unsigned int Graph::AdjacencyList<T>::_index_for_node(const std::vector<T, std::allocator<_Tp1> >&, const T&)’:
../AdjacencyList.h:99: error: expected ‘;’ before ‘iter’
../AdjacencyList.h:100: error: ‘iter’ was not declared in this scope
In file included from ../AdjacencyListTest.cpp:9:
../AdjacencyList.h: In member function ‘const unsigned int Graph::AdjacencyList<T>::_index_for_node(const std::vector<T, std::allocator<_Tp1> >&, const T&)’:
../AdjacencyList.h:99: error: expected …Run Code Online (Sandbox Code Playgroud) 根据EGit用户指南,要使用合并工具,应右键单击具有合并冲突的资源,然后选择Team > Merge Tool.但是,当我这样做时,"合并工具"选项显示为灰色.EGit正在检测冲突并向我展示冲突文件的图标和文本标签装饰.
有任何想法吗?
当我char *在C++中初始化这样的局部变量时:
char * pattern = "oggS";
Run Code Online (Sandbox Code Playgroud)
编译器警告我:
Foo.cpp:34: warning: deprecated conversion from string constant to ‘char*’
Run Code Online (Sandbox Code Playgroud)
在C++中执行此操作的不推荐方法是什么?
如果它很重要,这就是我如何调用编译器(来自Eclipse):
g++-4.5 -O0 -g3 -Wall -std=c++0x -c -fmessage-length=0 -MMD -MP -MF"Foo.d" -MT"Foo.d" -o"Foo.o" "Foo.cpp"
Run Code Online (Sandbox Code Playgroud)