是否有更简单的代码在PRAWN插件生成的PDF文件中的所有N页上设置页眉和页脚.
代码写在一个
" report.pdf.prawn "文件,它是PDF视图页面的直接编码区域
以下是文件中的代码 report.pdf.prawn
pdf.text "Creation Date " + Time.now.strftime('%d-%m-%Y')
pdf.text "Page Count:#{pdf.page_count}"
Run Code Online (Sandbox Code Playgroud)
我想要的是将这些值放置在页眉或/和页脚的左侧和右侧.
任何建议都会有所帮助.
在我正在研究的rails项目中,我使用此Gemfile插入了对rspec,黄瓜和自动测试的支持(部分)
gem 'rspec-rails'
gem 'cucumber-rails'
gem 'autotest-standalone'
gem 'autotest-rails-pure'
gem 'zentest-without-autotest'
Run Code Online (Sandbox Code Playgroud)
但是为了使用自动测试运行测试,我需要执行,bundle exec autotest否则它将失败并显示此消息
$ autotest
loading autotest/cucumber_rails_rspec_rspec2
Error loading Autotest style autotest/cucumber_rails_rspec_rspec2 (no such file to load -- autotest/cucumber_rails_rspec_rspec2). Aborting.
Run Code Online (Sandbox Code Playgroud)
现在我正在使用Mac进行开发,我想启用autotest-growl和autotest-fsevents gem,但是如果我将这些行插入我的 ~/.autotest
require 'autotest/growl'
require 'autotest/fsevent'
Run Code Online (Sandbox Code Playgroud)
然后我需要在Gemfile中插入相应的gems,一切正常,但它会破坏我的CI服务器上的构建(在Linux上)
如何在不为本地和CI环境维护不同的Gemfile的情况下解决这个问题?
编辑:
目前我在Gemfile中用这些行解决了
if RUBY_PLATFORM.downcase.include?("darwin") # I'm on Mac
gem 'autotest-fsevent'
gem 'autotest-growl'
end
Run Code Online (Sandbox Code Playgroud)
它既可以在本地也可以在CI服务器上运行,我不知道它是否会弄乱一些东西,目前它似乎完美无缺.
任何更干净的方式仍然是受欢迎的.
EDIT2:
我切换到群组解决方案.虽然之前的monkeypatch在开发和持续集成方面都运行良好,但如果您使用capistrano bundler任务进行部署或使用bundle install --deployment选项(在生产中建议),它将在生产中出现错误
使用该if RUBY_PLATFORM.downcase.include?("darwin")行时,您将在部署时收到此错误.
# bundle install --deployment --without development test
You are trying to install …Run Code Online (Sandbox Code Playgroud) 我正在调查validates_presence_of实际上是如何工作的.假设我有两个模型
class Project < ActiveRecord::Base
[...]
has_many :roles
end
Run Code Online (Sandbox Code Playgroud)
和
class Role < ActiveRecord::Base
validates_presence_of :name, :project
belongs_to :project
end
Run Code Online (Sandbox Code Playgroud)
我想要它,以便角色总是属于现有项目,但我从这个例子中发现,这可能导致无效(孤立)角色保存到数据库中.因此,正确的方法是插入validates_presence_of :project_id我的角色模型,它似乎有效,即使我认为在语义上更有意义来验证项目的存在而不是项目ID.
除此之外,如果我只是验证project_id的存在,我认为我可以放置一个无效的id(对于一个非现有项目),因为默认情况下AR不会为迁移添加完整性检查,即使我手动添加了一些数据库不支持它们(即MySQL与MyISAM或sqlite).这个例子证明了
# with validates_presence_of :name, :project, :project_id in the role class
Role.create!(:name => 'foo', :project_id => 1334, :project => Project.new)
AREL (0.4ms) INSERT INTO "roles" ("name", "project_id") VALUES ('foo', NULL)
+----+------+------------+
| id | name | project_id |
+----+------+------------+
| 7 | foo | |
+----+------+------------+
Run Code Online (Sandbox Code Playgroud)
当然我不会写这样的代码,但我想防止DB中的这种错误数据.
我想知道如何确保角色总是与(真实的和保存的)项目相关联.
我找到了validates_existence gem,但我不想在我的项目中添加gem,除非是绝对必要的.
有什么想法吗?
更新
validates_presence_of …
我确信这不应该像看起来那么困难......我不能使用JQuery scrollpane,因为我需要它在提交时充当标准格式textarea ..需要在IE7 +,Safari&中工作firefox至少......任何想法?
试过这个......
textarea {
scrollbar-face-color: #ff8c00;
scrollbar-track-color: #fff8dc;
scrollbar-arrow-color: #ffffff;
scrollbar-highlight-color: #fff8dc;
scrollbar-shadow-color: #d2691e;
scrollbar-3dlight-color: #ffebcd;
scrollbar-darkshadow-color: #8b0000;
}
Run Code Online (Sandbox Code Playgroud)
...但仅适用于IE?
有任何想法吗??
我正在开始一个新的Zend Framework项目,我将与设计师合作.我将使用git维护这个项目代码,通常设计师不会说git(或任何编程语言),所以我想让他的事情变得简单,否则我恐怕他根本不会使用git.我的计划是给他一些Git gui,并且他应该只使用基本的git功能,例如commit,diff,fetch,merge,push和pull.
我正在使用gitolite来维护我们的git存储库的共享副本,因为它有一个精细的权限系统,我将只为设计者提供RW访问权限(设计)和对其他分支的读访问权限.
为了简单起见,我想与他分享主项目中的一些文件夹(遵循ZF推荐的结构),他确实需要访问它才能完成工作.与此同时,我希望我们两个人仍然能够相互融合.
他的分支的结构减少应该是这样的:
<project name>/
application/
layouts/
scripts/
views/
scripts/
public/
css/
images/
js/
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用子模块完成这项任务,但维护起来会很麻烦,因为我应该将项目拆分到(至少)4子库中,他应该只能访问子库,并且他有3个存储库可以使用.因此,如果这是唯一的解决方案,我会放弃这个想法.
我已经读过的一些链接让我觉得我所要求的是可能的:
这是我的问题:
design(git checkout -b design和git mv/rm?)git merge design从主分支,反之亦然)我找到了另外两种可能解决这两个问题的方法
我尝试git rm all-unneeded-stuff在设计分支中实现第一个后,我在主分支中进行提交,其中涉及白名单路径中的文件和黑名单路径中的另一个文件,但是git merge失败并显示以下消息
CONFLICT (delete/modify): application/Bootstrap.php deleted in HEAD and modified in master. Version master of application/Bootstrap.php left in tree.
Run Code Online (Sandbox Code Playgroud)
然后我在master分支中添加了一个新目录,当从设计中合并时,添加了新目录.我在驱动程序中添加了一些调试回声,我发现在两种情况下都没有调用它,可能是因为它不是真正的合并.
我还没有尝试过第二种方法(.gitignore),但是如果我已经理解这种方法不符合我的需求,因为它只会忽略设计分支中列入黑名单的文件,但是它们会在设计分公司,打破了我的要求.
我把我的实验推到了GitHub上
我认为目前没有解决方案.使用当前的git实现,这根本无法实现.
我想要反驳,但我担心它不会发生.
我正在使用此设置开发自定义引擎.
我用它创建了引擎
rails plugin new MyEngine --full
Run Code Online (Sandbox Code Playgroud)
然后我添加了rspec-rails和guard-rspec作为开发依赖项
s.add_development_dependency "rspec-rails"
s.add_development_dependency "guard-rspec"
Run Code Online (Sandbox Code Playgroud)
在我的gemspec文件中.
当我同时运行rspec和rake spec(有或没有bundle exec)我的规格运行正常.当我运行guard命令但它第一次运行所有规格然后它什么都不做.它不会检测整个应用程序中的任何文件更改.
Guardfile像往常一样生成guard init spec,这是它的内容
# A sample Guardfile
# More info at https://github.com/guard/guard#readme
guard 'rspec', :version => 2 do
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch('spec/spec_helper.rb') { "spec/" }
# Rails example
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] …Run Code Online (Sandbox Code Playgroud) 我阅读了很多有关这些主题的文章,并且我知道没有什么解决方案可以完美地处理多语言站点。我使用的是不同的文件夹,以服务为不同语言的内容,所以我有www.example.com/en,www.example.com/es等等。
当用户首次访问该站点时,www.example.com我从Accept-LanguageHTTP标头中选择最匹配的语言,en如果没有语言匹配,则使用version 将其重定向到最合适的页面。因此,这里没有实际页面,www.example.com并且它始终会生成重定向。
这对于用户和搜索引擎都非常有效,但是这种方法存在缺陷,喜欢的语言分布在不同的语言中,我希望所有人都能 www.example.com
如果我设置og:url到根页FB履带投诉重定向循环,因为它去www.example.com那么它重定向到www.example.com/en已og:url设置www.example.com。我想保持喜欢的统一,即“喜欢” www.example.com/es和“喜欢” www.example.com/en都应计入主要领域。
我当前的解决方案是以这种方式修改重定向代码:当用户代理为facebook时,永远不要在www.example.com请求时重定向。使用默认语言环境或FB请求的带fb_localeparam的语言环境。
我还添加了区域设置开放图标记,以告知FB我页面的不同区域设置。
最后,我将规范的url标记保留在语言环境部分中,因为每种语言都以这种方式提供自己的内容,搜索引擎应该意识到这一点。这(或多或少)是主页的头部
<meta content="website" property="og:type" />
<meta content="http://www.example.com/" property="og:url" />
<meta content="en_US" property="og:locale" />
<meta content="es_ES" property="og:locale:alternate" />
<meta content="fr_FR" property="og:locale:alternate" />
<link href="http://www.example.com/en" rel="canonical" />
Run Code Online (Sandbox Code Playgroud)
这样,一切似乎都可以正常工作,并且计数在所有语言之间共享。我只收到Facebook调试器的警告
标头中的og:url和规范url:og:url标签不匹配,它与html中的rel ='canonical'链接的URL不同。
此设置正确吗?我会对此标记有任何疑问吗?
类似的问题,但他希望每个国家都喜欢。
有没有快速的方法来获得给定哈希的(随机)排列?例如,对于数组,我可以使用示例方法
ruby-1.9.2-p180 :031 > a = (1..5).to_a
=> [1, 2, 3, 4, 5]
ruby-1.9.2-p180 :032 > a.sample(a.length)
=> [3, 5, 1, 2, 4]
Run Code Online (Sandbox Code Playgroud)
对于哈希,我可以在哈希键上使用相同的方法并使用
ruby-1.9.2-p180 :036 > h = { 1 => 'a', 2 => 'b', 3 => 'c' }
=> {1=>"a", 2=>"b", 3=>"c"}
ruby-1.9.2-p180 :037 > h.keys.sample(h.length).inject({}) { |h2, k| h2[k] = h[k]; h2 }
=> {3=>"c", 2=>"b", 1=>"a"}
Run Code Online (Sandbox Code Playgroud)
但这太丑了.哈希是否有任何"样本"方法可以避免所有代码?
更新正如@Michael Kohl在评论中所指出的,这个问题仅对ruby 1.9.x有意义.因为在1.8.x中Hash是无序的,所以没有办法做到这一点.
如何正确整合twitter-bootstrap-rails gem和资产管道?
我已经按照安装步骤进行操作,目前我有这个application.css
*= require_self
*= require bootstrap_and_overrides
Run Code Online (Sandbox Code Playgroud)
然后在bootstrap_and_overrides.css.less中我导入其他控制器样式表,以使它们与我在覆盖文件中定义的变量一起使用,并且能够在<controller-name>.css.less文件中的控制器特定样式表中使用bootstrap mixins .目前我这样做:
# in bootstrap_and_overrides.css.less
// generated code ...
// Your custom LESS stylesheets goes here
//
// Since bootstrap was imported above you have access to its mixins which
// you may use and inherit here
//
// If you'd like to override bootstrap's own variables, you can do so here as well
// See http://twitter.github.com/bootstrap/less.html for their names and documentation
//
// Example:
// @linkColor: #ff0000; …Run Code Online (Sandbox Code Playgroud) ruby-on-rails less sprockets asset-pipeline twitter-bootstrap
我正在尝试在共享主机上安装Redmine.以下是安装在其上的一些软件版本:
ruby 1.8.7(2011-02-18 patchlevel 334)[x86_64-linux]
Rails 2.3.12
MySQL 5.0.91
Redmine - 来自当前主干(v1.2.1,我猜)
我正在使用本指南进行安装:http://www.redmine.org/projects/redmine/wiki/RedmineInstall.在此之前的所有步骤我成功完成.运行"rake generate_session_store"时安装失败.有什么不对?以下是运行此命令后出现的大部分错误:
NOTE: Gem::SourceIndex#add_spec is deprecated, use
Specification.add_spec. It will be removed on or after 2011-11-01.
Gem::SourceIndex#add_spec called from
/usr/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:127.
... repeated a lot of times
Run Code Online (Sandbox Code Playgroud) 我最近不得不在我的gem文件中添加两个宝石.当我将它们添加到我的gemfile时,我直接推送到我的生产服务器.我通过SSH连接到我的生产服务器,并尝试运行bundle install.这是我走的错误:
>> bundle install
Run Code Online (Sandbox Code Playgroud)
.........
>> You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.
If this is a development machine, remove the Gemfile freeze
by running `bundle install --no-deployment`.
You have added to the Gemfile:
* RedCloth
* tanker
Run Code Online (Sandbox Code Playgroud) 我需要使用 ActiveRecord 在数据库表中存储与其他字段相关的正则表达式。
我在 Regexp 类中找到了to_s方法,它指出
返回一个包含正则表达式及其选项的字符串(使用 (?opts:source) 表示法。这个字符串可以被反馈到 Regexp::new 到一个与原始语义相同的正则表达式。(但是,Regexp# == 在比较两者时可能不会返回 true,因为正则表达式本身的来源可能不同,如示例所示)Regexp#inspect 生成通常更易读的 rxp 版本。
所以这似乎是一个可行的解决方案,但它会用一种不寻常的语法存储 exp,为了让字符串存储我需要用/my-exp/.to_s. 此外,我可能无法直接编辑为正则表达式。例如一个简单的正则表达式产生:
/foo/i.to_s # => "(?i-mx:foo)"
Run Code Online (Sandbox Code Playgroud)
另一个选项是评估字段内容,因此我可以将普通表达式存储在 db 列中,然后执行 aneval(record.pattern)以获取实际的正则表达式。这是有效的,因为我是唯一负责管理正则表达式记录的人,所以这样做应该没有问题,除了应用程序错误;-)
我还有其他选择吗?我不想在 db 字段上做 eval 但另一方面我不想使用我不知道的语法。
activerecord ×2
bundler ×2
ruby ×2
arrays ×1
autotest ×1
css ×1
eval ×1
facebook ×1
fsevents ×1
gem ×1
gemfile ×1
git ×1
git-merge ×1
git-subtree ×1
guard ×1
hash ×1
html ×1
less ×1
meta-tags ×1
permutation ×1
rake ×1
redmine ×1
regex ×1
rspec ×1
ruby-1.9 ×1
scrollbars ×1
seo ×1
sprockets ×1
textarea ×1
validation ×1