我正在使用REXML构建一个xml文档,并希望以特定方式输出到文本.doc是一个CuePoint标签列表,我用Element.new和add_element生成的那些标签都拼凑成一行如下:( stackoverflow在这里将它们分成两行,但想象下面的全部是一条线):
<CuePoint><Time>15359</Time><Type>event</Type><Name>inst_50</Name></CuePoint><CuePoint><Time>16359</Time><Type>event</Type><Name>inst_50</Name></CuePoint>
当我将它们保存到文件时,我希望它们看起来像这样:
<CuePoint>
<Time>15359</Time>
<Type>event</Type>
<Name>inst_50</Name>
</CuePoint>
<CuePoint>
<Time>16359</Time>
<Type>event</Type>
<Name>inst_50</Name>
</CuePoint>
Run Code Online (Sandbox Code Playgroud)
我尝试将.write函数传递给值2,以缩进它们:这会产生以下结果:
xml.write($stdout, 2)
产生
<CuePoint>
<Time>
15359
</Time>
<Type>
event
</Type>
<Name>
inst_50
</Name>
</CuePoint>
<CuePoint>
<Time>
16359
</Time>
<Type>
event
</Type>
<Name>
inst_50
</Name>
</CuePoint>
Run Code Online (Sandbox Code Playgroud)
这是不需要的,因为它已经将空白插入到只有文本的标签内容中.即Name标签的内容现在是"\n inst_50 \n"或其他东西.这将会破坏读取xml的应用程序.
有谁知道我怎么能按照我想要的方式格式化输出文件?
感谢任何建议,最多
编辑 - 我刚刚通过另一个StackOverflow帖子在ruby-forum上找到答案:http://www.ruby-forum.com/topic/195353
formatter = REXML::Formatters::Pretty.new
formatter.compact = true
File.open(@xml_file,"w"){|file| file.puts formatter.write(xml.root,"")}
Run Code Online (Sandbox Code Playgroud)
这会产生类似的结果
<CuePoint>
<Time>33997</Time>
<Type>event</Type>
<Name>inst_45_off</Name>
</CuePoint>
<CuePoint>
<Time>34080</Time>
<Type>event</Type>
<Name>inst_45</Name>
</CuePoint>
Run Code Online (Sandbox Code Playgroud)
CuePoint标签之间没有额外的界限,但这对我来说很好.我将这个问题留在这里以防万一其他人偶然发现它.
我设法在我拥有的mysql数据库(称为"e_learning_resource_prelive")中损坏(或某些)'sessions'表.这通常不会成为问题,因为我可以回到数据库的备份转储.但是,损坏的表似乎阻止我删除数据库:
> mysqladmin -u root drop e_learning_resource_prelive
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.
Do you really want to drop the 'e_learning_resource_prelive' database [y/N] y
mysqladmin: DROP DATABASE e_learning_resource_prelive failed;
error: 'Unknown table 'sessions''
Run Code Online (Sandbox Code Playgroud)
当我进入数据库时,会话表显示在show_tables中(它是唯一一个,mysqladmin drop删除了其余的)但我不能删除它:
mysql> show tables;
+---------------------------------------+
| Tables_in_e_learning_resource_prelive |
+---------------------------------------+
| sessions |
+---------------------------------------+
1 row in set (0.00 sec)
mysql> drop table sessions;
ERROR 1051 (42S02): Unknown table 'sessions'
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我如何删除此表,或整个数据库?我需要删除数据库,然后从我的备份转储重建它.
我觉得这应该很简单但我无法弄清楚如何使用"mysqladmin create"创建数据集时设置字符集.我认为这会奏效
mysqladmin -u root db_name --character-set=utf8
Run Code Online (Sandbox Code Playgroud)
利用mysqladmin --help文本的这一点:
-O, - set-variable = name更改变量的值.请注意,此选项已弃用; 您可以使用--variable-name = value直接设置变量.
我也尝试过这个
mysqladmin -u root create db_name --default-character-set=utf8
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,db都是在没有投诉的情况下创建的,但我认为它不起作用:
mysql> SHOW VARIABLES like '%character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
Run Code Online (Sandbox Code Playgroud)
我可以看到character_set_system是utf8,但是上面所有的latin1都应该显示utf8吗?
感谢任何建议 …
假设我有一个变量questionId是一个整数,我想找到在其id tr中有fragment("question_"+questionId)的元素.我怎样才能做到这一点?我以为我可以用jquery '属性包含'选择器来做到这一点.
例如,这适用于非动态值,
$("tr[id*='quiz_question_7674']")
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何在那里插入变量值.这不适用于例如:
questionId = 7674;
$("tr[id*='quiz_question_'+questionId]")
Run Code Online (Sandbox Code Playgroud)
任何人的想法?有没有比"属性包含"更好的方法来做到这一点?我感觉我错过了一些明显的东西.
谢谢,最大
编辑 - 已解决.啊,我确实错过了一些明显的东西.我一直忘记它只是一个字符串,仅此而已:
$( "TR [ID*= 'quiz_question _ "+ questionId +"']")
我最近将这些行添加到我的〜/ .bashrc文件中,以显示当前分支,如果我在一个git工作文件夹中,并且它很适合.但是,我丢失的是当前文件夹名称曾经显示在我打开的终端的选项卡中,现在它不是:它总是只是说'终端'.我可以回来并仍然保留git的东西吗?这是有问题的线 - 这是问题的第二个,因为只注释第二行就可以解决问题.
source /etc/bash_completion.d/git
PS1='\h:\w$(__git_ps1 "\[\e[32m\][%s]\[\e[0m\]")$ '
Run Code Online (Sandbox Code Playgroud)
我一直在寻找PS1选项的解释,但在那里看不到关于终端窗口标题的任何信息.任何人都可以建议吗?谢谢,最大
编辑
我实际上已经操纵PS1以便拥有格式的终端
<rvm version and gemset> <computer name> <current folder> <git branch>
,每个部分都有不同的颜色,但我以前从未真正看过这些文档,所以感谢你的链接.我目前的PS1设置是
\[\033[0;31m\]$(__my_rvm_ruby_version)\[\033[0;33m\]\h\[\033[0;37m\]:\[\033[1;33m\]\W\[\033[1;32m\]$(__git_branch)\[\033[1;32m\]$(__git_dirty) \[\033[0;37m\]$
Run Code Online (Sandbox Code Playgroud)
想必我可以做点什么
export "<something> $PS1"
Run Code Online (Sandbox Code Playgroud)
设置终端选项卡名称而不会丢失现有设置.虽然我一直在探索这个问题并且无法做到这一点.
编辑 - 在下面的一些答案的帮助下想出来 - 谢谢大家!我把它包装在一个shell脚本中
#!/usr/bin/env bash
#renames the current terminal tab via the PS1 env var
source ~/.bashrc
export PS1="$PS1""\[\e]0;$1 \a\]"
Run Code Online (Sandbox Code Playgroud)
它被称为"renametab",所以我现在可以用它来调用它
source renametab mytabname
Run Code Online (Sandbox Code Playgroud)
将变量导出到当前shell中需要"source":如果我只是执行renametab mytabname导出,则会进入子shell,该脚本在脚本完成时被终止.
再次感谢所有人的帮助!
我正在使用authlogic和我的用户模型,登录字段设置为使用电子邮件,因此:
acts_as_authentic do |c|
c.login_field = :email
end
Run Code Online (Sandbox Code Playgroud)
如果我尝试创建新用户,并且电子邮件已在使用中,则会两次添加重复的电子邮件错误:(来自控制台)
user = User.new(:first_name => "fred", :last_name => "Smith", :email => User.last.email);user.valid?;errors = user.errors
=> {:email=>["has already been taken", "has already been taken"]}
Run Code Online (Sandbox Code Playgroud)
我猜这与使用电子邮件作为登录有关,也许?除了validates_format_of之外,我在电子邮件上没有任何其他验证,并且我尝试删除该验证(没有任何区别).
这是一个痛苦,因为它弄乱了我在验证失败时在表单上显示的错误.
在我尝试破解authlogic之前,有谁知道为什么会发生这种情况?谢谢,最大
我一直在我的应用程序中使用黄瓜,这是一个在ruby 1.8.6中运行的rails 2.2.2应用程序(升级现在不是一个选项).黄瓜很好,现在我正在尝试使用水豚.我安装了capybara (1.1.1)宝石并把线require 'capybara/rails'放在我的features/support/env.rb file.
现在,当我运行黄瓜时,我收到此错误:
Using the default profile...
uninitialized constant Rack::Builder (NameError)
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:445:in `load_missing_constant'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:77:in `const_missing'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/capybara-1.1.1/lib/capybara/rails.rb:4
/home/max/.rvm/rubies/ruby-1.8.6-p420/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
/home/max/.rvm/rubies/ruby-1.8.6-p420/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:155:in `require'
/home/max/work/charanga/elearn_container/elearn/features/support/env.rb:10
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/rb_support/rb_language.rb:143:in `load'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/rb_support/rb_language.rb:143:in `load_code_file'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/runtime/support_code.rb:171:in `load_file'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/runtime/support_code.rb:83:in `load_files!'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/runtime/support_code.rb:82:in `each'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/runtime/support_code.rb:82:in `load_files!'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/runtime.rb:137:in `load_step_definitions'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/runtime.rb:39:in `run!'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/cli/main.rb:43:in `execute!'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/cli/main.rb:20:in `execute'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/cucumber:14
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/bin/cucumber:19:in `load'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/bin/cucumber:19
Run Code Online (Sandbox Code Playgroud)
这是错误文件:
#/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/capybara-1.1.1/lib/capybara/rails.rb
require 'capybara'
require 'capybara/dsl'
Capybara.app = Rack::Builder.new do
map "/" do
if Rails.version.to_f >= 3.0
run Rails.application
else # Rails 2 …Run Code Online (Sandbox Code Playgroud) 我有一个rails网站.我想,在mongrel重新启动时,将当前的svn版本写入public/version.txt,以便我可以将其放入页眉中的注释中.
问题是获得当前版本的svn - 我有点困惑.
例如,如果我对一段尚未更新的文件进行svn更新,我会得到"修订版4571".但是,如果我做svn信息,我得到
路径:.
URL:http://my.url/trunk
存储库根目录:http://my.url/lesson_planner
存储库UUID:#########
版本:4570
节点类型:directory
计划:normal
上次更改作者:max
Last Changed Rev:4570
最后更改日期:2009-11-30 17:14:52 +0000(星期一,2009年11月30日)
请注意,这表示修订版4570,比上一个命令低1.
任何人都可以直截了当地告诉我如何简单地获取当前版本号?
谢谢,最大
我试图将用于描述我的用户模型的"登录"属性的字符串覆盖为"用户名".我认为这是设置的vendor/rails/activerecord/lib/active_record/locale/en.yml.我尝试在这里和我的config/locales/en.yml文件中更改它,并且在任何情况下它都不起作用(我在每次更改后重新启动服务器).
在这两种情况下都是这样做的:
en:
...
activerecord:
attributes:
user:
login: User Name
Run Code Online (Sandbox Code Playgroud)
当我测试它时,例如f.label:在我的新用户表单中登录,它出现为"登录"而不是"用户名".我是否因为这些东西是如何运作的一些根本错误而努力,或者它真的不起作用?无论哪种方式,任何人都可以告诉我如何解决它?谢谢,最大
我在rvm中第一次使用rails3(我多年来一直使用rails2).试图启动控制台,我收到此错误:
require': no such file to load -- readline
我用Google搜索,这似乎是一个常见的问题.大多数解决方案似乎包括1)安装以下:sudo apt-get install libncurses5-dev libreadline5-dev
2)要为readline的宝石文件夹,运行ruby extconf.rb做产生一个makefile 3)make和make install
现在,我没有在我的rvm中安装readline,所以我尝试安装它.但无法弄清楚宝石是什么:gem install readline没有给出任何结果.我找到的唯一一个是gem install rdp-rb-readline.我安装了两个dev库,安装了rdp-rb-readline gem,转到后续的gem文件夹,然后运行ruby extconf.rb.这确实生成了一个makefile.但我不能make或make install:我得到这些错误:
max-laptop:readline$ make
cc -I. -I. -I/usr/lib/ruby/1.8/i486-linux -I. -DHAVE_READLINE_READLINE_H -DHAVE_READLINE_HISTORY_H -DHAVE_RL_FILENAME_COMPLETION_FUNCTION -DHAVE_RL_USERNAME_COMPLETION_FUNCTION -DHAVE_RL_COMPLETION_MATCHES -DHAVE_RL_DEPREP_TERM_FUNCTION -DHAVE_RL_COMPLETION_APPEND_CHARACTER -DHAVE_RL_BASIC_WORD_BREAK_CHARACTERS -DHAVE_RL_COMPLETER_WORD_BREAK_CHARACTERS -DHAVE_RL_BASIC_QUOTE_CHARACTERS -DHAVE_RL_COMPLETER_QUOTE_CHARACTERS -DHAVE_RL_FILENAME_QUOTE_CHARACTERS -DHAVE_RL_ATTEMPTED_COMPLETION_OVER -DHAVE_RL_LIBRARY_VERSION -DHAVE_RL_EVENT_HOOK -DHAVE_RL_CLEANUP_AFTER_SIGNAL -DHAVE_RL_CLEAR_SIGNALS -DHAVE_RL_VI_EDITING_MODE -DHAVE_RL_EMACS_EDITING_MODE -DHAVE_REPLACE_HISTORY_ENTRY -DHAVE_REMOVE_HISTORY -fPIC -fno-strict-aliasing -g -g -O2 -fPIC -c readline.c
readline.c: In …