小编Max*_*ams的帖子

Rexml - 漂亮的打印文本内联和子标签缩进

我正在使用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标签之间没有额外的界限,但这对我来说很好.我将这个问题留在这里以防万一其他人偶然发现它.

ruby pretty-print rexml

9
推荐指数
1
解决办法
6031
查看次数

在Mysql db中删除了搞砸的表

我设法在我拥有的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)

任何人都可以告诉我如何删除此表,或整个数据库?我需要删除数据库,然后从我的备份转储重建它.

mysql mysqladministrator

8
推荐指数
2
解决办法
8302
查看次数

如何使用mysqladmin创建utf8数据库

我觉得这应该很简单但我无法弄清楚如何使用"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吗?

感谢任何建议 …

mysql utf-8

8
推荐指数
1
解决办法
6640
查看次数

jquery'属性包含'具有动态值的选择器

假设我有一个变量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 +"']")

javascript jquery

7
推荐指数
1
解决办法
1万
查看次数

Bash PS1设置 - 如何将当前文件夹作为终端标题返回

我最近将这些行添加到我的〜/ .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,该脚本在脚本完成时被终止.

再次感谢所有人的帮助!

git bash

7
推荐指数
2
解决办法
5041
查看次数

Authlogic:生成"已经发送电子邮件"错误两次

我正在使用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-on-rails authlogic ruby-on-rails-3

7
推荐指数
1
解决办法
853
查看次数

"require'capybara/rails'"给出了"未初始化的常量Rack :: Builder"

我一直在我的应用程序中使用黄瓜,这是一个在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)

ruby-on-rails cucumber capybara

7
推荐指数
1
解决办法
1573
查看次数

将当前的svn版本写入文本文件

我有一个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.

任何人都可以直截了当地告诉我如何简单地获取当前版本号?

谢谢,最大

svn ruby-on-rails

6
推荐指数
1
解决办法
3200
查看次数

使用I18n覆盖模型属性名称 - 无法使其正常工作

我试图将用于描述我的用户模型的"登录"属性的字符串覆盖为"用户名".我认为这是设置的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:在我的新用户表单中登录,它出现为"登录"而不是"用户名".我是否因为这些东西是如何运作的一些根本错误而努力,或者它真的不起作用?无论哪种方式,任何人都可以告诉我如何解决它?谢谢,最大

ruby-on-rails internationalization

6
推荐指数
1
解决办法
4011
查看次数

Rails3和readline问题

我在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)makemake install

现在,我没有在我的rvm中安装readline,所以我尝试安装它.但无法弄清楚宝石是什么:gem install readline没有给出任何结果.我找到的唯一一个是gem install rdp-rb-readline.我安装了两个dev库,安装了rdp-rb-readline gem,转到后续的gem文件夹,然后运行ruby extconf.rb.这确实生成了一个makefile.但我不能makemake 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 …

ruby ruby-on-rails readline rvm ruby-on-rails-3

6
推荐指数
1
解决办法
2783
查看次数