我正在努力将我们的一个Rails 2.3.8应用程序升级到Rails 3,并且遇到了捆绑和部署的恼人问题.我在Windows机器上开发应用程序,但生产环境正在运行Ubuntu Linux.现在,我的问题是Bundler忽略了mysql生产环境中的gem,并且Passenger吐出:"!!!错过了mysql gem.将它添加到你的Gemfile:gem'mysql','2.8.1'"
这是我的Gemfile:
# Edit this Gemfile to bundle your application's dependencies.
# This preamble is the current preamble for Rails 3 apps; edit as needed.
source 'http://rubygems.org'
gem 'rails', '3.0.0'
gem 'net-ldap', :require => 'net/ldap'
gem 'highline', :require => 'highline/import'
gem 'mysql', '2.8.1'
gem 'net-ssh', :require => 'net/ssh'
# Bundle gems for the local environment. Make sure to
# put test-only gems in this group so their generators
# and rake …Run Code Online (Sandbox Code Playgroud) 在我的一个项目中,我需要与几个后端系统协作.其中一些有些缺乏文档,部分因此我有一些测试代码与一些测试服务器交互只是为了看到一切按预期工作.但是,访问这些服务器的速度非常慢,因此我不希望每次运行测试套件时都运行这些测试.
我的问题是如何处理你想跳过某些测试的情况.目前我使用环境变量'BACKEND_TEST'和条件语句来检查是否为我想跳过的每个测试设置了变量.但有时我想跳过测试文件中的所有测试,而不必在每个测试的开头添加额外的行.
必须与测试服务器交互的测试并不多,因为我在其他情况下使用flexmock.但是,你不能嘲笑自己远离现实.
从这个问题的标题可以看出,我正在使用Test :: Unit.此外,如果它有任何区别,该项目是一个Rails项目.
有几次我一直处于这种情况,我想重构一些模型的设计,并最终将更新逻辑放入迁移中.但是,据我所知,这不是一种好的做法(特别是因为鼓励您使用模式文件进行部署,而不是迁移).你如何处理这些问题?
要清楚我的意思,请说我有一个用户模型.由于我认为只有两种用户,即"普通"用户和管理员,我选择使用一个简单的布尔字段来判断用户是否是管理员.
然而,在我想到我需要第三类用户之后,可能是主持人或类似的东西.在这种情况下,我添加了一个UserType模型(和相应的迁移),以及第二次迁移,用于从用户表中删除"admin"标志.这就是问题所在.在"add_user_type_to_users"迁移中,我必须将admin标志值映射到用户类型.此外,为了做到这一点,用户类型必须存在,这意味着我不能使用种子文件,而是在迁移中创建用户类型(也被认为是不好的做法).这里有一些代表情况的虚构代码:
class CreateUserTypes < ActiveRecord::Migration
def self.up
create_table :user_types do |t|
t.string :name, :nil => false, :unique => true
end
#Create basic types (can not put in seed, because of future migration dependency)
UserType.create!(:name => "BASIC")
UserType.create!(:name => "MODERATOR")
UserType.create!(:name => "ADMINISTRATOR")
end
def self.down
drop_table :user_types
end
end
class AddTypeIdToUsers < ActiveRecord::Migration
def self.up
add_column :users, :type_id, :integer
#Determine type via the admin flag
basic = UserType.find_by_name("BASIC")
admin = UserType.find_by_name("ADMINISTRATOR")
User.all.each {|u| u.update_attribute(:type_id, (u.admin?) ? admin.id : …Run Code Online (Sandbox Code Playgroud) 我正在研究一个与许多外部系统API交互的系统:s.他们中的大多数都需要某种身份验证.为了便于使用,有一个"应用程序可以访问"的AppConfig,它存储配置信息以及外部系统的凭据.
我的问题是,将用户名和密码(以明文形式)存储到应用程序配置文件中的外部系统是不是一个坏主意.如果是这样,你怎么避免它?
要访问配置文件,您必须危及服务器的文件系统或其他服务器(当然还有任何开发人员的系统)上的git存储库.我一直在考虑加密配置文件中的密码不会增加安全级别,因为加密密钥也必须存储在某个地方.我错了吗?
我非常感谢您解释如何解决这个问题的答案.
解
好的,所以这是我的最终解决方案.我使用OpenSSL创建了一个简单的库来加密和解密我的敏感数据.加载配置时,将从用户检索密钥,但在存储在文件中的生产服务器上除外.它仍然不是最佳解决方案,但它比我以前的"解决方案"更好.
谢谢您的回答.我会接受韦恩的回答,因为它是最有用的.
我使用以下代码将模板呈现为一个我可以在以后使用的字符串:
renderer = ActionView::Base.new(MyApp::Application.config.view_path)
# INCLUDE HELPERS HERE
data = renderer.render(:partial => template, :locals => locals)
Run Code Online (Sandbox Code Playgroud)
但是,我希望能够访问一些帮助程序(实际上所有).在rails 2.3中,我能够做到这一点:
renderer.extend ApplicationController.master_helper_module
Run Code Online (Sandbox Code Playgroud)
但是,从Rails 3开始,这不再有效.那么,如何让我的帮助方法可用于我的模板?
我有兴趣学习为大多数主流浏览器(Chrome,Firefox,Safari,Opera,IE)开发浏览器扩展,但我不确定从哪里开始.为了保持兴趣,我想开始为具有最温和学习曲线的浏览器开发.
那么,您为不同的浏览器开发扩展的经验是什么?当然,必须为多个浏览器开发一个浏览器才能给出合理的答案.
我是一个经验丰富的Web开发人员,也没有C++/Java/Ruby/Erlang等问题,所以问题不是我能学到什么,而是我最快能收获的成果.
opera firefox-addon google-chrome-extension safari-extension